Windows调度程序是否跳过处于等待状态的线程? (等待计时器)

时间:2014-12-08 22:11:32

标签: multithreading winapi timer process

就像标题所说的那样。如果线程或进程正在使用等待计时器并且处于等待状态,请使用

进行设置
DWORD WINAPI WaitForSingleObject(
  _In_  HANDLE hHandle,
  _In_  DWORD dwMilliseconds
);

调度程序是否以不同的方式处理它,如果它正在workwork()?即,如果调度程序为一个线程留出一个(例如)10ms的时隙但是当它查看该线程并意识到它处于一个等待状态时,调度程序会立即切换回来允许下一个任务提前开始其时隙;或者它只是坐在那里为那些10ms燃烧CPU时间,就好像正在使用sleep()?我试图找出如何接近它但找不到任何东西。

1 个答案:

答案 0 :(得分:1)

等待线程不会被执行。如果你考虑一下,就没有什么可以执行的 - 线程正在等待,所以如果它被分配,它就不会与CPU时间有任何关系。

我认为你的困惑可能会因为你认为它是进行实际检查的线程对象是否准备好了。因此,我认为,你想象它的方式是WaitForSingleObject()是一个连续轮询的函数,并且在你的线程的上下文中运行,并且调度程序为线程分配时间,以便线程本身可以轮询对象是否准备就绪。

这不是 - 正是内核正在检查这些对象,并且线程本质上是暂停的。一旦对象准备就绪,调度程序将激活"线程并安排它执行。