线程睡眠&唤醒WinOS

时间:2013-01-02 12:15:39

标签: c++ multithreading concurrency pthreads

如何在WinOS上实现像pthreads pthread_cond_signal这样的东西。我不想使用pthreads Win32端口,因为我也支持Win64。

我正在开发一个基于任务的系统,其中客户端请求产生在服务器上产生n线程的n任务。在客户端线程产生了所有服务器任务之后,我希望它进入睡眠状态或其他不消耗任何系统资源的线程状态。当所有服务器任务完成后,我希望唤醒客户端线程并将结果返回给客户端应用程序。

编辑: 我想过在某些共享内存中等待一个条件变量,并在循环中检查condvar,但是不循环也会消耗资源吗?我可以在循环中添加sleep()但是我不会得到实时客户端请求&服务器响应 - 任务可能需要1/1000秒(但也需要多秒)。

2 个答案:

答案 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