2009-07-10 12 views
8

Estoy portando mi aplicación a Windows desde Linux. Soy bastante nuevo en el arte de portar aplicaciones en todas las plataformas. Por lo que sé, Windows no admite de forma nativa la implementación de los hilos POSIX. ¿Es esto cierto? He escuchado sobre alguna implementación de pthreads para Windows (un contenedor o algo así), ¿sería mejor usarlos o usar CreateMutex y otras API provistas por Windows? Alguien por favor. ilumíname con los PRO y CON de ambos mundos. Algunos consejos misceláneos para portarlos irían bien junto con la respuesta.¿Qué es mejor para Windows? pthreads o CreateMutex?

Gracias de antemano.

Respuesta

3

Una cosa que debes tener en cuenta es cuál es el futuro de este código. ¿Planeas desarrollar (y lanzar) en ambas plataformas en el futuro? ¿O es este un puerto de ida?

Lo mejor que se puede hacer al transferir un proyecto es mantener los cambios reales en el código lo más mínimos posible. En tu caso, esto significaría ir con una solución pthread. Habiendo dicho eso, si estás planeando que esto sea un puerto de ida, ir a ser nativo nunca duele. :)

Me tomaría un tiempo para examinar a fondo ambas estratigias y luego implementar la que te sientas más cómodo.

7

Todo va a ser lo mismo (pthreads simplemente va a llamar a EnterCriticalSection etc), así que si tienes un contenedor de pthreads, probablemente deberías usarlo para que no tengas que cambiar tanto código

0

¿Por qué no tener lo mejor de ambos mundos y usar una biblioteca que envuelve tanto pthreads como la API de Windows y usa la adecuada debajo de las carátulas? Tu código permanece igual en ambas plataformas.

No hay escasez de tales libs en C++, así que no puedo imaginar que no haya versiones C.

+0

El APR (Apache Portable Runtime) es una fantástica biblioteca de C multiplataforma que hace esto. Muy recomendado ya que está bien probado y, um, bastante popular. – Clay

0

En Windows, las aplicaciones C/C++ que usan CRT deben llamar al beginthread/beginthreadex para inicializar correctamente el CRT en el nuevo hilo.

1

Lo primero que haría es exportar a Boost Thread bajo Linux que a Windows.

+0

Entonces, ¿cómo es Boost Threads mejor que POSIX? – puffadder

+0

De ahora en adelante, Boost Threads, que será la próxima base de subprocesos de biblioteca estándar, será la forma recomendada para realizar subprocesos en C++ multiplataforma. La API de subprocesos POSIX y la API de subprocesamiento de Win32 no son exactamente intercambiables. La variable de condición, por ejemplo, está disponible en POSIX pero no en todas las plataformas de Win32. Si va a confiar en una biblioteca, un contenedor POSIX/Win32, por ejemplo, corre el riesgo de no conocer la calidad de la biblioteca y es posible que no pueda obtener mucha ayuda. Boost por otro lado, seguramente encontrará mucha ayuda cuando tenga problemas. –

+0

Gracias. Eso fue una ayuda. ¿Está disponible para C? – puffadder

5

esto funciona así: http://sourceware.org/pthreads-win32/

Es un puerto de la biblioteca pthreads para Windows.

+0

Voy a arrojar mis 2 centavos que hemos tenido muy buena suerte con esta biblioteca también. Una aplicación bastante compleja con muchos semáforos, colas y theads fue portada desde VxWorks a POSIX y finalmente a Windows con esto. –

+0

¡Esta biblioteca es genial! – vy32