为什么休眠(1)的休眠时间在Windows中似乎是可变的? [英] Why is the sleep-time of Sleep(1) seems to be variable in Windows?
本文介绍了为什么休眠(1)的休眠时间在Windows中似乎是可变的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
上周我需要测试一些不同的算法函数,为了方便自己,我添加了一些人工睡眠,并简单地测量了时钟时间。大概是这样的:
start = clock();
for (int i=0;i<10000;++i)
{
...
Sleep(1);
...
}
end = clock();
由于睡眠的参数以毫秒为单位表示,我预计总挂钟时间约为10秒(由于算法的原因,这一时间要高得多,但现在这并不重要),这确实是我的结果。
今天早上,由于新的Microsoft Windows热修复程序,我不得不重新启动电脑,令我惊讶的是,睡眠(1)花费的时间不再是1毫秒,而是大约0.0156秒。
所以我的测试结果完全搞砸了,因为总时间从10秒增加到大约156秒。
我们在几台PC上测试了这一点,显然在一些PC上,一次睡眠的结果确实是1ms。在其他PC上为0.0156秒。
然后,突然,过了一段时间,睡眠时间降到了0.01秒,然后一个小时后又回到了0.001秒(1ms)。
这是Windows中的正常行为吗? Windows是不是在重启后的最初几个小时就"昏昏欲睡",然后在一段时间后逐渐获得更高的睡眠粒度? 或者,有没有其他方面可以解释这种行为的变化?
在我的所有测试中,没有其他应用程序同时运行(或者:至少没有占用任何CPU)。
有什么想法吗?
操作系统为Windows 7。
推荐答案
我没有听说过分辨率本身就像这样跳跃,但一般来说,睡眠的分辨率遵循任务调度器的时钟节拍。因此,默认情况下通常为10或15毫秒,具体取决于Windows的版本。您可以通过发出timeBeginPeriod将其手动设置为1 ms。
这篇关于为什么休眠(1)的休眠时间在Windows中似乎是可变的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文