Windows中的CONDITION_VARIABLE;不会编译

时间:2011-07-29 10:51:40

标签: c++ windows gcc condition-variable

我正在尝试用C ++编写一个用Linux编写的程序的windows版本。为了使程序成为线程安全的,我在Linux版本中使用pthread_cond_tpthread_cond_wait。这些函数使用互斥锁来帮助确保等待的线程实际上正在等待。

我发现CONDITION_VARIABLE可能会在Windows中发挥作用,但是我无法弄清楚它为什么不能编译。我收到错误"错误:' CONDITION_VARIABLE'没有命名类型"据我所知,尽管包含了所有相关的标题。我试着在http://msdn.microsoft.com/en-us/library/ms686903%28v=VS.85%29.aspx上复制粘贴代码,这些代码也不会编译。我正在使用GCC。

关于如何编译这个的任何想法?或任何其他方法,不涉及condition_variables?

4 个答案:

答案 0 :(得分:4)

您是否在_WIN32_WINNT之前定义了WINVER#include <windows.h>

必须包含仅在Windows的更高版本中添加的内容的定义。对于条件变量,您需要将它们设置为至少0x0600,因为条件变量在V6中是新的(即Vista / 2008)。

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

答案 1 :(得分:2)

检查您是否有最新的Windows标头, WinBase.h 包含以下行:

typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE;

当然,您_WIN32_WINNT #defined至少0x600

答案 2 :(得分:0)

您提到您正在使用pthread库进行线程处理。在使用pthread时,您是否考虑过this article关于使用mutex for windows。

答案 3 :(得分:-1)

考虑使用pthreads-win32,它在Windows上实现POSIX线程API,包括条件变量。