我正在使用 GetThreadTimes
每 5 微秒(或多或少)监视一个线程
该线程“ sleep
”持续 1 分钟,但由于某种原因,有时我从 GetThreadTimes
获得的“用户时间”发生变化,即使该线程仍处于 sleep 模式。< br/>
内核时间始终为 0。
有人知道为什么会这样吗?
谢谢:)
最佳答案
5 微秒?!
GetThreadTimes()
测量线程在 sleep 、用户/内核模式下花费的量子数。我在 Win32 上观察到 10-15 毫秒的典型调度程序量程。在一个量程以下,您会发现 GetThreadTimes()
报告的时间没有改变——它基本上只是将经过的量程(在每个状态中)的(整数)数乘以一个量程的持续时间。
低于 10-15 毫秒,您真的不能期望 GetThreadTimes()
返回的任何值都是准确的。 非常,一次只能看到更新的三个测量值之一;正如您所讨论的那样。
在您讨论的规模上,Linux 和 Win32 都有古怪的线程运行时报告行为。我发现唯一可以真正将计划执行时间测量到 5 微秒的操作系统是 Mac OS X 和 VxWorks - QNX 可能也有这种能力。
关于c++ - GetThreadtimes 给出奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5596490/