如何在WinOS上实现像pthreads pthread_cond_signal
这样的东西。我不想使用pthreads Win32端口,因为我也支持Win64。
我正在开发一个基于任务的系统,其中客户端请求产生在服务器上产生n线程的n任务。在客户端线程产生了所有服务器任务之后,我希望它进入睡眠状态或其他不消耗任何系统资源的线程状态。当所有服务器任务完成后,我希望唤醒客户端线程并将结果返回给客户端应用程序。
编辑:
我想过在某些共享内存中等待一个条件变量,并在循环中检查condvar,但是不循环也会消耗资源吗?我可以在循环中添加sleep()
但是我不会得到实时客户端请求&服务器响应 - 任务可能需要1/1000秒(但也需要多秒)。
答案 0 :(得分:3)
Win32 API支持Vista及更高版本的条件变量。有关API的信息,请参见this MSDN page,有关使用情况,请参见this one。
WakeConditionVariable()
相当于pthread_cond_signal()
而WakeAllConditionVariable()
相当于pthread_cond_broadcast()
那就是说,如果你在VS2012上,我真的建议你使用新的C++11 threading library。它还支持condition variables,因为在多个平台上运行对您很重要,使用标准库可以帮助您最终合并代码库。
答案 1 :(得分:1)
您可以使用Event函数和WaitForMultipleObject等
有关事件功能的更多信息: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686360(v=vs.85).aspx#event_functions
更多关于WaitForSingleObject的信息: http://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx
更多关于win32中的同步: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686360(v=vs.85).aspx