【发布时间】:2023-03-09 10:08:01
【问题描述】:
我在代码中使用了Sleep(500),并使用getTickCount() 来测试时间。我发现它的成本大约是 515ms,超过 500。有人知道这是为什么吗?
【问题讨论】:
-
getTickCount 的粒度约为 10-16 毫秒。
-
Sleep(n)并不能保证您的睡眠时间恰好是nms,只是您的睡眠时间至少nms。 -
这个问题在没有 winapi 标签的情况下仍然是相关的。
-
@DavidGrinberg:我很惊讶,你的评论得到了如此多的投票,认为它很有用,而实际上它甚至不是真的。 Sleep 的文档不支持您的主张。具体来说:"如果 dwMilliseconds 小于系统时钟的分辨率,线程可能会休眠小于指定的时间长度。" 和 "如果 dwMilliseconds 大于一个刻度但小于比两个,等待可以是任何地方在一到两个滴答之间,依此类推”(强调我的)。
-
我有一台笔记本电脑,它定期从
Sleep电话返回,大约需要一半的时间,所以那些报告“Sleep的答案至少保证dwMilliseconds睡眠”,我什至不同意接着就,随即。我认为它与Intel's SpeedStep 有关,但我不确定在答案中提及这一点。