Zij*_*gWu 6 c++ windows winapi multithreading multiprocessing
我刚刚意识到SignalObjectAndWaitWindows平台有API功能.但是,已经有SetEvent和WaitForSingleObject.您可以一起使用它们来实现相同的目标SignalObjectAndWait.
基于MSDN,SignalObjectAndWait比单独调用SetEvent和更有效WaitForSingleObject.它还指出:
线程可以使用该
SignalObjectAndWait函数来确保工作线程在发信号通知对象之前处于等待状态.
我不完全理解这句话,但似乎效率并不是我们需要的唯一原因SignalObjectAndWait.任何人都可以提供SetEvent+ WaitForSingleObject无法提供提供的功能的场景SignalObjectAndWait吗?
我的理解是,这个单一函数更有效,因为它避免了以下情况。
与单独的函数调用(例如后跟 )相比,该
SignalObjectAndWait函数提供了一种更有效的方法来向一个对象发出信号,然后等待另一个对象。SetEventWaitForSingleObject
当你SetEvent和另一个人[特别是。更高优先级]线程正在等待此事件,线程调度程序可能会从信号线程夺走控制权。当线程重新接收控制权时,它唯一要做的就是执行以下WaitForSingleObject调用,从而浪费了上下文切换的时间。
使用SignalObjectAndWait你暗示内核说“嘿,无论如何我都会等待另一个事件,所以如果它对你有任何影响,不要过度地来回切换上下文”。