Mar*_* Ba 8 c++ windows winapi multithreading
在等待超时时间为零的事件时,是否会WaitForSingleObject(或WaitForMultipleObjects)导致上下文切换?(Sleep(0)据我所知,会立即产生一个线程时间片.)
现在,关于WaitForSingle|MultipleObject和事件处理.如果WaitFor*Object实际上需要等待,它显然会产生剩余的时间片.然而,有两种情况API并没有需要等待:
WAIT_OBJECT_0WAIT_OBJECT_0或WAIT_TIMEOUT现在,鉴于此,WaitForSingleObject如果提供超时时间为零,将导致线程上下文切换?
基于Windows Research Kernel和一些简单的逆向工程KeWaitForSingleObject,答案是否定的。查看WRK,在KiSwapThread调用之前检查内部计时器的到期时间,以确保在未发出信号的情况下函数立即返回。