CONDITION_VARIABLE в окнах;не будет компилироваться - PullRequest
6 голосов
/ 29 июля 2011

Я пытаюсь сделать Windows-версию программы, написанной для Linux, на C ++.Чтобы программа была поточно-ориентированной, я использую pthread_cond_t и pthread_cond_wait в версии для Linux.Эти функции используют мьютекс, чтобы убедиться, что ожидающий поток действительно ожидает.

Я обнаружил, что CONDITION_VARIABLE может добиться цели в Windows, однако я не могу понять, почему он не компилируется.Я получаю сообщение об ошибке «ошибка: CONDITION_VARIABLE» не называет тип », даже если включены все соответствующие заголовки, насколько я могу судить.Я попытался скопировать код на http://msdn.microsoft.com/en-us/library/ms686903%28v=VS.85%29.aspx, который тоже не компилируется.Я использую GCC.

Есть идеи, как это скомпилировать?или какие-либо альтернативные подходы, которые не включают в себя condition_variables?

Ответы [ 4 ]

4 голосов
/ 29 июля 2011

Определяли ли вы _WIN32_WINNT и WINVER до #include <windows.h>?

Это необходимо для включения определений вещей, добавленных только в более поздние версии Windows.Для условных переменных необходимо установить их как минимум 0x0600, поскольку условные переменные были новыми в V6 (т. Е. Vista / 2008).

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

2 голосов
/ 30 июля 2011

Убедитесь, что у вас установлены последние заголовки Windows, а WinBase.h имеет следующую строку:

typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE;

И, конечно, у вас есть _WIN32_WINNT #, определенный как минимум 0x600.

0 голосов
/ 30 июля 2011

Рассмотрите возможность использования pthreads-win32 , который реализует API потоков POSIX в Windows, включая условные переменные.

0 голосов
/ 29 июля 2011

Вы упомянули, что вы используете библиотеку pthread для многопоточности. Вы изучили эту статью об использовании мьютекса для окон при использовании pthread.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...