无法在kernel32.dll中找到过程入口点InitializeConditionVariable

时间:2010-05-17 09:39:10

标签: c++ winapi multithreading

我正在运行生产者消费者问题(使用Windows线程)。它已成功编译但在运行时显示以下错误

程序入口点InitializeConditionVariable无法位于动态库Kernel32.dll中。

你能说出原因是什么吗

2 个答案:

答案 0 :(得分:5)

这是一个仅在Vista及更高版本中可用的API函数。我猜你在XP上运行这段代码。

为避免意外使用仅在Windows的更高版本中可用的API函数,您需要定义_WIN32_WINNT宏:

#define _WIN32_WINNT 0x502   // Designed to run on Windows XP SP2 and up
#include <windows.h>

如果您未设置它,则在Windows SDK的更高版本上通常默认为0x600,选择Vista作为目标操作系统。顺便说一句,你可能不得不放弃条件变量。您的问题中没有足够的细节来提供合适的替代品。使用互斥锁的代码应该不难找到。

答案 1 :(得分:2)

InitializeConditionVariable以及相关的条件变量API仅适用于Windows Vista及更高版本。您可以使用Boost.Thread提供适用于Windows XP的条件变量实现。我写了一篇关于如何将它用于生产者/消费者队列的article on my blog