1

而且我的意思不是精确到一毫秒,我问的是我想要延迟一个小时使用的情况Sleep(60 * 60 * 1000)。会是一个小时而不是 55 或 70 分钟吗?线程是否保证唤醒而不是永远休眠?

4

1 回答 1

2

一个多小时后,Sleep() 调用的准确性还不错,(也很容易测试)。Sleep() 调用将返回足够接近小时,以至于无法使用手动秒表确定任何错误,(在 XP 上尝试过 - 现在没有理由让它有任何不同,AFAIK)。

错误。如果连续调用 Sleep(3600*1000),wall-time 当然会累积,特别是如果在每个间隔结束时执行的操作本身很长和/或盒子严重超载,(即更多准备好的线程比核心)。

如果你要求它休眠一个小时,为什么线程会永远休眠?如果你调用 Sleep(3600*1000),它会在那之后准备好。如果没有,那么操作系统无论如何都是 stuff 并且您正在重新启动。

这种 Sleep() 调用可能比某些计时器更受欢迎的原因是它是单行的,并且可以在调用者堆栈的任何地方工作 - 不需要消息处理程序和/或状态机来处理计时器回调。

于 2012-11-07T21:24:14.697 回答