【问题标题】:waitforsingleobject for an already signaled eventwaitforsingleobject 用于已发出信号的事件
【发布时间】:2013-01-11 09:49:46
【问题描述】:

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

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

请指教。

【问题讨论】:

  • 是的 - @Roman 说的。如果要保存信号,请使用手动重置事件或信号量。
  • 如果WaitForSingleObject 超时,则表示您的句柄未发出信号。如前所述,这可能是因为您正在使用自动重置事件(之前已调用过 WaitForSingleObjectWaitForMultipleObjects。或者您的代码中的其他地方有错误。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多