我正在运行生产者消费者问题(使用Windows线程)。它已成功编译但在运行时显示以下错误
程序入口点InitializeConditionVariable无法位于动态库Kernel32.dll中。
你能说出原因是什么吗
答案 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。