SignalObjectAndWait关于SetEvent和WaitForSingleObject的目的是什么?

Zij*_*gWu 6 c++ windows winapi multithreading multiprocessing

我刚刚意识到SignalObjectAndWaitWindows平台有API功能.但是,已经有SetEventWaitForSingleObject.您可以一起使用它们来实现相同的目标SignalObjectAndWait.

基于MSDN,SignalObjectAndWait比单独调用SetEvent和更有效WaitForSingleObject.它还指出:

线程可以使用该SignalObjectAndWait函数来确保工作线程在发信号通知对象之前处于等待状态.

我不完全理解这句话,但似乎效率并不是我们需要的唯一原因SignalObjectAndWait.任何人都可以提供SetEvent+ WaitForSingleObject无法提供提供的功能的场景SignalObjectAndWait吗?

Rom*_* R. 2

我的理解是,这个单一函数更有效,因为它避免了以下情况。

与单独的函数调用(例如后跟 )相比,该SignalObjectAndWait函数提供了一种更有效的方法来向一个对象发出信号,然后等待另一个对象。SetEventWaitForSingleObject

当你SetEvent和另一个人[特别是。更高优先级]线程正在等待此事件,线程调度程序可能会从信号线程夺走控制权。当线程重新接收控制权时,它唯一要做的就是执行以下WaitForSingleObject调用,从而浪费了上下文切换的时间。

使用SignalObjectAndWait你暗示内核说“嘿,无论如何我都会等待另一个事件,所以如果它对你有任何影响,不要过度地来回切换上下文”。