3

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

我认为它应该立即返回 a WAIT_OBJECT_0...但在我的情况下,它等待事件被设置,并且由于这没有发生(事件已经设置),它超时。

请给个建议。

4

1 回答 1

9

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

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

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

于 2013-01-11T09:54:33.683 回答