上周我需要测试一些不同的算法函数,为了让自己变得容易,我添加了一些人工睡眠并简单地测量了时钟时间.像这样的东西:
start = clock();
for (int i=0;i<10000;++i)
{
...
Sleep(1);
...
}
end = clock();
Run Code Online (Sandbox Code Playgroud)
由于睡眠的参数以毫秒表示,我预计总挂钟时间约为10秒(由于算法而大,因此现在不重要),这确实是我的结果.
今天早上我因为新的Microsoft Windows热修复而不得不重新启动我的电脑,令我惊讶的是睡眠(1)不再需要1毫秒,但大约需要0.0156秒.
所以我的测试结果完全搞砸了,因为总时间从10秒增加到大约156秒.
我们在几台PC上进行了测试,显然在一些PC上,一次睡眠的结果确实是1 ms.在其他PC上它是0.0156秒.
然后,突然,一段时间后,睡眠时间下降到0.01秒,然后一小时后回到0.001秒(1毫秒).
这是Windows中的正常行为吗?Windows重启后的第一个小时是"困",然后在一段时间后逐渐获得更高的睡眠粒度?或者是否有任何其他方面可以解释行为的变化?
在我的所有测试中,没有其他应用程序同时运行(或者:至少不占用任何CPU).
有任何想法吗?
操作系统是Windows 7.
我没有听说过解决方案本身就像那样跳跃,但一般来说,睡眠的分辨率遵循任务调度器的时钟滴答.因此默认情况下,通常为10或15毫秒,具体取决于Windows的版本.您可以通过发出timeBeginPeriod手动将其设置为1毫秒.
| 归档时间: |
|
| 查看次数: |
2063 次 |
| 最近记录: |