【发布时间】:2010-10-25 21:41:57
【问题描述】:
上周我需要测试一些不同的算法函数,为了让自己更轻松,我添加了一些人工睡眠并简单地测量了时钟时间。像这样的:
start = clock();
for (int i=0;i<10000;++i)
{
...
Sleep(1);
...
}
end = clock();
由于 Sleep 的参数以毫秒表示,我预计挂钟的总时间约为 10 秒(由于算法的原因,这个时间要高得多,但现在这并不重要),这确实是我的结果。
今天早上,由于新的 Microsoft Windows 热修复程序,我不得不重新启动我的电脑,令我惊讶的是,睡眠 (1) 不再需要 1 毫秒,而是大约 0.0156 秒。
所以我的测试结果完全搞砸了,因为总时间从 10 秒增加到大约 156 秒。
我们在多台 PC 上对此进行了测试,显然在某些 PC 上,一次睡眠的结果确实是 1 毫秒。在其他 PC 上是 0.0156 秒。
然后,过了一会儿,睡眠时间突然下降到 0.01 秒,然后一小时后又回到 0.001 秒(1 毫秒)。
这是 Windows 中的正常行为吗? Windows 是否在重新启动后的前几个小时“休眠”,然后在一段时间后逐渐获得更高的休眠粒度? 或者还有其他方面可以解释这种行为变化吗?
在我的所有测试中,没有其他应用程序同时运行(或者:至少不占用任何 CPU)。
有什么想法吗?
操作系统是 Windows 7。
【问题讨论】:
-
睡眠前后(用椭圆表示)不能影响结果吗?