2011-07-29 12 views
6

Próbuję zrobić wersję systemu Windows napisany dla systemu Linux, w C++. Aby program był bezpieczny dla wątków, używam wersji pthread_cond_t i pthread_cond_wait w wersji dla systemu Linux. Te funkcje używają muteksa, aby upewnić się, że oczekujący wątek rzeczywiście czeka.CONDITION_VARIABLE w oknach; wont kompilować

Znalazłem, że CONDITION_VARIABLE może zrobić lewy w Windows, jednak nie mogę zrozumieć, dlaczego nie skompiluje. Pojawia się błąd "error:" CONDITION_VARIABLE "nie określa typu" mimo, że wszystkie odpowiednie nagłówki są włączone, o ile mogę powiedzieć. Próbowałem skopiować-wklejając kod na http://msdn.microsoft.com/en-us/library/ms686903%28v=VS.85%29.aspx, który nie będzie się kompilował. Używam GCC.

Wszelkie pomysły na kompilację tego? lub jakiekolwiek alternatywne podejścia, które nie obejmują zmiennych warunkowych?

+0

Jakiego kompilatora używasz i ile lat ma zestaw Windows SDK? [Notice] (http://msdn.microsoft.com/en-us/library/ms683469 (v = VS.85) .aspx), który wymaga co najmniej Vista SDK. – wilx

+0

może Windows.h używany przez gcc/cygwin (?) Jest zbyt stary? Przypuszczam, że lepiej byłoby użyć Visual Studio Express dla Windows, lub ukraść windows.h i inne nagłówki systemowe z jego instalacji lub zaktualizować nagłówki i biblioteki Windows w inny sposób. – user396672

Odpowiedz

4

Czy zdefiniowałeś _WIN32_WINNT i WINVER przed #include <windows.h>?

Jest to konieczne, aby uwzględnić definicje dla rzeczy dodanych tylko w nowszych wersjach systemu Windows. W przypadku zmiennych warunkowych należy ustawić je na co najmniej 0x0600, ponieważ zmienne warunkowe były nowe w wersji V6 (tj. Vista/2008).

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

+0

Tak, to brzmi jak coś, czego może mu brakować. –

+0

Dobry pomysł, ale nadal nie będzie się kompilował. Mój program wygląda #define _WIN32_WINNT 0x0600 #define winver 0x0600 #include #include #include #include int main (void) { CONDITION_VARIABLE iść; return 0; } – pjaall

+0

@pjaall Jakiej wersji pakietu Windows SDK/Visual Studio/C++ używasz? – Richard

0

Wspomniałeś, że używasz pthread bibliotekę do gwintowania. Czy sprawdziłeś, czy używasz mutex dla Windows przy korzystaniu z pthread na this article.

2

Sprawdź, czy masz najnowsze nagłówki Windows, a WinBase.h ma następującą linię:

typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE; 

I oczywiście, trzeba _WIN32_WINNT #defined przynajmniej 0x600.

-1

Rozważ skorzystanie z pthreads-win32, która implementuje API wątków POSIX w systemie Windows, dotyczy to zmiennych warunkowych.

Powiązane problemy