这里有一个奇怪的问题——但是:
如果我在具有 20 分钟超时的互斥锁上使用 WaitForSingleObject。然后,机器在等待时进入睡眠模式(或休眠)...... 12 小时后醒来——我对 WaitForSingleObject 的调用会超时吗?或者计时器会随着机器睡眠而暂停?
这里有一个奇怪的问题——但是:
如果我在具有 20 分钟超时的互斥锁上使用 WaitForSingleObject。然后,机器在等待时进入睡眠模式(或休眠)...... 12 小时后醒来——我对 WaitForSingleObject 的调用会超时吗?或者计时器会随着机器睡眠而暂停?
根据https://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx, WaitForSingleObject 确实需要考虑在低功耗状态下花费的时间,但仅从Windows 8。所以在 Windows 7 上它应该像上面描述的那样运行,但在 Windows 8 和更高版本上,只有当系统已经在请求的时间内主动运行时,调用才会超时。
刚刚在 Windows 7 上进行了 5 分钟超时和 10 分钟睡眠的测试。我在等待无尽的线程。
惊喜 -WaitForSingleObject
我的机器唤醒后超时。
摘自 MSDN:
Windows XP、Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 和 Windows Server 2008 R2:dwMilliseconds 值确实包括在低功耗状态下花费的时间。例如,当计算机处于睡眠状态时,超时确实会继续倒计时。
Windows 8、Windows Server 2012、Windows 8.1、Windows Server 2012 R2、Windows 10 和 Windows Server 2016:dwMilliseconds 值不包括在低功耗状态下花费的时间。例如,当计算机处于睡眠状态时,超时不会继续倒计时。