6

我正在尝试用 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。

关于如何编译这个的任何想法?或任何不涉及条件变量的替代方法?

4

4 回答 4

4

你定义_WIN32_WINNTWINVER之前#include <windows.h>

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

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

于 2011-07-29T10:57:31.480 回答
2

检查您是否拥有最新的 Windows 标头,并且WinBase.h具有以下行:

typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE;

当然,您_WIN32_WINNT至少有 #defined 0x600

于 2011-07-30T13:18:19.700 回答
0

您提到您正在使用 pthread 库进行线程处理。在使用 pthread 时,您是否查看过这篇关于在 windows 上使用互斥锁的文章。

于 2011-07-29T11:03:18.603 回答
-1

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

于 2011-07-30T14:15:17.120 回答