如何在不使用Sleep()的情况下创建时间计数器?

时间:2015-03-12 13:50:29

标签: c++ winapi

我想创建一个从120分钟开始计时的计时器。我考虑使用Sleep(),但我发现Sleep()不准确(因此倒计时可能需要122分钟而不是120分钟!)。我还有其他什么选择?

3 个答案:

答案 0 :(得分:2)

SetTimer,然后处理WM_TIMER消息。

答案 1 :(得分:1)

Sleep(120*3600*1000)足够准确,需要120分钟,也许还需要几毫秒。

如果你尝试一次重复睡眠一分钟就会出现问题,因为超支会累积。这可以通过检查到目前为止你睡过多长时间来解决(比较初始time()和当前time()值,模数为1分钟)。这样,你偶尔可以睡59秒而不是一分钟。

答案 2 :(得分:0)

不知道你真正想做什么,有些方法可以做到:

  1. 使用std :: chrono的时钟来不断检查当前时间。 High_resolution或steady_clock是很好的候选者。您可能希望产生线程以减少CPU上的忙等待效果。
  2. 去异国情调并使用std :: conditional_variable在预先锁定的互斥锁上执行wait_until(time_point)。它永远不会锁定互斥锁,因此会在你想要的时间之后超时。
  3. 与2.相同的技巧,但改为使用WaitForSingleObject。