如何在不使用 Sleep() 的情况下创建时间计数器?
How to create a time counter without using Sleep()?
我想创建一个从 120 分钟开始计时的计时器。我考虑过使用 Sleep()
但我发现 Sleep()
不准确(所以倒计时可能需要 122 分钟而不是 120 分钟!)。我还有哪些其他选择?
SetTimer,然后处理WM_TIMER消息。
Sleep(120*3600*1000)
足够准确,这将需要 120 分钟,也许还要多几毫秒。
如果您尝试一次重复睡眠一分钟,就会出现问题,因为超限会累积。这可以通过检查您到目前为止睡过头的时间来解决(比较初始 time()
和当前 time()
值,以一分钟为模)。这样,您偶尔可能会睡 59 秒而不是一分钟。
不知道自己真正想做什么,这里有一些方法可以做到:
- 使用来自std::chrono的时钟不断检查当前时间。 High_resolution 或 steady_clock 是不错的选择。您可能希望放弃您的线程以减少对 CPU.
的忙等待影响
- 异国情调并使用 std::conditional_variable 在预锁定互斥锁上执行 wait_until( time_point )。它永远不会锁定互斥体,因此会在您期望的时间后超时。
- 与 2 相同的技巧。但使用 WaitForSingleObject 代替。
我想创建一个从 120 分钟开始计时的计时器。我考虑过使用 Sleep()
但我发现 Sleep()
不准确(所以倒计时可能需要 122 分钟而不是 120 分钟!)。我还有哪些其他选择?
SetTimer,然后处理WM_TIMER消息。
Sleep(120*3600*1000)
足够准确,这将需要 120 分钟,也许还要多几毫秒。
如果您尝试一次重复睡眠一分钟,就会出现问题,因为超限会累积。这可以通过检查您到目前为止睡过头的时间来解决(比较初始 time()
和当前 time()
值,以一分钟为模)。这样,您偶尔可能会睡 59 秒而不是一分钟。
不知道自己真正想做什么,这里有一些方法可以做到:
- 使用来自std::chrono的时钟不断检查当前时间。 High_resolution 或 steady_clock 是不错的选择。您可能希望放弃您的线程以减少对 CPU. 的忙等待影响
- 异国情调并使用 std::conditional_variable 在预锁定互斥锁上执行 wait_until( time_point )。它永远不会锁定互斥体,因此会在您期望的时间后超时。
- 与 2 相同的技巧。但使用 WaitForSingleObject 代替。