2011-07-29 10 views
6

Estoy tratando de hacer una versión de Windows de un programa escrito para Linux, en C++. Para que el programa sea seguro para subprocesos, uso pthread_cond_t y pthread_cond_wait en la versión de Linux. Estas funciones usan un mutex para ayudar a asegurarse de que el hilo de espera realmente está esperando.CONDITION_VARIABLE en Windows; No compilar

Encontré que CONDITION_VARIABLE puede hacer el truco en Windows, sin embargo no puedo entender por qué no se compilará. Aparece el error "error: 'CONDITION_VARIABLE' no nombra un tipo" aunque todos los encabezados relevantes están incluidos, por lo que puedo decir. Traté de copiar y pegar el código en http://msdn.microsoft.com/en-us/library/ms686903%28v=VS.85%29.aspx, que tampoco compilará. Estoy usando GCC.

¿Alguna idea sobre cómo compilar esto? o cualquier enfoque alternativo, que no implica condition_variables?

+0

¿Qué compilador está utilizando y cuántos años tiene su Windows SDK? [Aviso] (http://msdn.microsoft.com/en-us/library/ms683469 (v = VS.85) .aspx) que necesita al menos Vista SDK. – wilx

+0

tal vez windows.h utilizado por gcc/cygwin (?) Es demasiado viejo? Supongo que sería mejor usar Visual Studio Express para Windows, o robar windows.h y otros encabezados del sistema desde la instalación o actualizar los encabezados y bibliotecas de Windows de alguna otra manera. – user396672

Respuesta

4

¿Ha definido _WIN32_WINNT y WINVER antes del #include <windows.h>?

Esto es necesario para incluir definiciones para cosas solo agregadas en versiones posteriores de Windows. Para las variables de condición, debe establecerlas en al menos 0x0600 ya que las variables de condición eran nuevas en V6 (es decir, Vista/2008).

Ver http://msdn.microsoft.com/en-us/library/aa383745%28VS.85%29.aspx

+0

Sí ... parece algo que podría estar perdiendo. –

+0

Buena idea, pero todavía no compilará. Mi programa se parece a #define _WIN32_WINNT 0x0600 0x0600 #define WINVER # include # include # include # include int main (void) { CONDITION_VARIABLE ir; return 0; } – pjaall

+0

@pjaall ¿Qué versión de Windows SDK/Visual Studio/C++ está usando? – Richard

0

Usted mencionó que está utilizando la biblioteca pthread para roscar. ¿Ha buscado en this article sobre el uso de mutex para Windows, al usar pthread.

2

Compruebe que ha recibido últimos titulares en Windows y WinBase.h tiene la siguiente línea:

typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE; 

Y, por supuesto, usted tiene _WIN32_WINNT #defined a por lo menos 0x600.

-1

Considere usar pthreads-win32, que implementa la API de hilos POSIX en Windows, esto incluye las variables de condición.

Cuestiones relacionadas