我正在尝试用C ++编写一个用Linux编写的程序的windows版本。为了使程序成为线程安全的,我在Linux版本中使用pthread_cond_t
和pthread_cond_wait
。这些函数使用互斥锁来帮助确保等待的线程实际上正在等待。
我发现CONDITION_VARIABLE
可能会在Windows中发挥作用,但是我无法弄清楚它为什么不能编译。我收到错误"错误:' CONDITION_VARIABLE'没有命名类型"据我所知,尽管包含了所有相关的标题。我试着在http://msdn.microsoft.com/en-us/library/ms686903%28v=VS.85%29.aspx上复制粘贴代码,这些代码也不会编译。我正在使用GCC。
关于如何编译这个的任何想法?或任何其他方法,不涉及condition_variables?
答案 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,包括条件变量。