C++ 如何在不使用Sleep()的情况下创建时间计数器?
我想创建一个时间计数器,可以从120分钟开始计算。我曾想过使用C++ 如何在不使用Sleep()的情况下创建时间计数器?,c++,winapi,C++,Winapi,我想创建一个时间计数器,可以从120分钟开始计算。我曾想过使用Sleep(),但我发现Sleep()并不准确(因此倒计时可能需要122分钟而不是120分钟!)。我还有其他选择吗?设置定时器,然后处理WM\u定时器消息。设置定时器,然后处理WM\u定时器消息。设置定时器,然后处理WM\u定时器消息。设置定时器,然后处理WM\u定时器消息。睡眠(120*3600*1000)足够准确,这将需要120分钟,也许还需要几毫秒 如果你试图一次重复睡一分钟,你就会遇到问题,因为睡眠过量会累积。这可以通过检查到
Sleep()
,但我发现Sleep()
并不准确(因此倒计时可能需要122分钟而不是120分钟!)。我还有其他选择吗?设置定时器,然后处理WM\u定时器消息。设置定时器,然后处理WM\u定时器消息。设置定时器,然后处理WM\u定时器消息。设置定时器,然后处理WM\u定时器消息。睡眠(120*3600*1000)
足够准确,这将需要120分钟,也许还需要几毫秒
如果你试图一次重复睡一分钟,你就会遇到问题,因为睡眠过量会累积。这可以通过检查到目前为止你睡过头的时间来解决(比较初始的time()
和当前的time()
值,以一分钟为单位)。这样,你偶尔可以睡59秒而不是一分钟 睡眠(120*3600*1000)
足够精确,这需要120分钟,也许还需要几毫秒
如果你试图一次重复睡一分钟,你就会遇到问题,因为睡眠过量会累积。这可以通过检查到目前为止你睡过头的时间来解决(比较初始的time()
和当前的time()
值,以一分钟为单位)。这样,你偶尔可以睡59秒而不是一分钟 睡眠(120*3600*1000)
足够精确,这需要120分钟,也许还需要几毫秒
如果你试图一次重复睡一分钟,你就会遇到问题,因为睡眠过量会累积。这可以通过检查到目前为止你睡过头的时间来解决(比较初始的time()
和当前的time()
值,以一分钟为单位)。这样,你偶尔可以睡59秒而不是一分钟 睡眠(120*3600*1000)
足够精确,这需要120分钟,也许还需要几毫秒
如果你试图一次重复睡一分钟,你就会遇到问题,因为睡眠过量会累积。这可以通过检查到目前为止你睡过头的时间来解决(比较初始的
time()
和当前的time()
值,以一分钟为单位)。这样,你偶尔可以睡59秒而不是一分钟 不知道自己真正想做什么这里有一些方法可以做到:
不知道自己真正想做什么,以下是一些方法:
不知道自己真正想做什么,以下是一些方法:
不知道自己真正想做什么,以下是一些方法:
它不一定比
Sleep()
更准确。如果队列中有更高优先级的消息,则其传递将被延迟。@Sean:SetTimer
延迟1000毫秒对于预期目的来说足够准确(以分钟和秒为单位显示当前剩余部分的倒计时)。由于基本/开始时间是已知的,因此只要处理WM\u TIMER
,也可以调整参数。@IInspectable-我想您会发现Sleep()
在相同的延迟下也是可以接受的。另外,这个问题没有提到有一个窗口可以发布WM_计时器。必须创建一个窗口才能发布到它是疯狂的。@Sean:Sleep
意味着第二个线程。创建一个只显示消息的窗口来处理消息一点也不疯狂。@IInspectable-不,它没有。如果你看一下被接受的答案,你会发现海报将使用Sleep()
,而没有提到任何附加的线程。此外,如果该程序是一个控制台应用程序或服务呢?此外,如果添加窗口,则需要处理消息队列以使其工作,这会使解决方案过于复杂。它不一定比Sleep()
更准确。如果你有更高的优先级