WaitForSingleObject (或WaitForMultipleObjects )是否会在等待一个超时时间为零的事件时导致上下文切换? (就我所知, Sleep(0)会立即产生一个线程时间片。)
现在,关于WaitForSingle|MultipleObject和Event句柄。 如果WaitFor * Object实际上需要等待,它显然会产生其余的时间片。 但是,API有两种情况不需要等待:
事件被发送,在这种情况下,它可以返回WAIT_OBJECT_0
或者事件的状态并不重要,因为我指定了等待时间为零,在这种情况下,它可以立即返回,或者使用WAIT_OBJECT_0或WAIT_TIMEOUT
现在,鉴于此,如果超时时间为零, WaitForSingleObject会导致线程上下文切换?
如何在调用SelectItem函数时强制CTreeCtrl不滚动到该项目?
将完整的应用程序转换为DLL
读取和打印c ++文件中的UTF-8符号
C#(单声道)Linux Web服务器托pipe跨线程一致的静态variables
multithreadingC Lua模块导致Lua脚本中的段错误
C ++ Linux服务 – 如何使用init.d + auto restart?
如何将键盘事件发送到Windows中的所有types的应用程序?
在Unix上的C上,一个进程怎么能告诉它对文件有什么权限而不打开呢?
当我的DLL版本改变了,我应该改变我的ProgID版本吗?
读取string中的gcc输出
基于Windows Research coreel和KeWaitForSingleObject一些简单的逆向工程,答案是否定的 。 看看WRK,在调用KiSwapThread之前检查内部定时器的到期时间,如果对象没有被发信号,确保函数立即返回。
现在看来,我在写这个问题的时候找到了一个答案 – 下面是我从可用文档中得出的结论:
MSDN声明如下:
dwMilliseconds [in]
超时间隔(以毫秒为单位)。 如果指定了非零值,则函数会一直等待,直到指定的对象被发信号或者间隔已过。 如果dwMilliseconds为零,如果指定的对象没有发送信号,函数不会进入等待状态 ; 它总是立即返回。 如果dwMilliseconds是INFINITE,那么函数只有在指定的对象被发信号时才会返回。
我想这意味着它也不进入等待状态,如果对象被发信号,并且我将解释为“ 没有进入等待状态 ”,因为“没有上下文切换发生”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。