waitforsingleobject用于已经发出信号的事件

时间:2013-01-11 09:49:47

标签: c++ multithreading winapi visual-c++ synchronization

我做WaitForSingleObject(handle, timeout); 如果在调用WaitForSingleObject之前已经发出了句柄信号,那么该函数将返回什么?

我认为它应该立即返回WAIT_OBJECT_0 ...但在我的情况下,它等待事件被设置,因为没有发生(事件已经设置),它超时。< / p>

请告知。

1 个答案:

答案 0 :(得分:7)

取决于活动。您对手动重置事件的期望是正确的,并且自动重置事件不会保持信号状态:Event Objects (Windows)

  

自动重置事件一个事件对象,其状态保持信号直到a   单个等待线程被释放,此时系统   自动将状态设置为无信号

     

如果没有线程在等待,则事件对象的状态仍然发出信号。   如果有多个线程在等待,则选择等待线程。做   不假设先进先出(FIFO)顺序。外部事件如   内核模式APC可以改变等待顺序。