如何在不使用 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 秒而不是一分钟。

不知道自己真正想做什么,这里有一些方法可以做到:

  1. 使用来自std::chrono的时钟不断检查当前时间。 High_resolution 或 steady_clock 是不错的选择。您可能希望放弃您的线程以减少对 CPU.
  2. 的忙等待影响
  3. 异国情调并使用 std::conditional_variable 在预锁定互斥锁上执行 wait_until( time_point )。它永远不会锁定互斥体,因此会在您期望的时间后超时。
  4. 与 2 相同的技巧。但使用 WaitForSingleObject 代替。