我需要在我的一个线程中等待一段时间,我开始考虑WaitForSingleObject
但它需要句柄来等待,尽管它可能需要超时输入;
另一个解决方案可能会使用SetTimer
,但它似乎会创建WM_TIMER
消息但我没有更改来捕获该消息,因为我在一个线程中,所以有什么我可以使用这里 ?我可以使用Sleep
吗?
答案 0 :(得分:3)
WM_TIMER不太可靠。它是一个低优先级的Windows消息,如果用户正在调整窗口大小,则不会发送该消息(例如)。
我会说"睡眠"是最好的选择,但在过去我使用WaitForSingleObject,因为它允许我传入一个句柄来取消等待操作,如果我需要。取决于你的设计。
答案 1 :(得分:2)
正确的方法很大程度上取决于您对to wait some time
的意思。 Sleep function和WaitForSingleObject function基本上具有相同的准确度。
取决于底层硬件和OS的版本,可实现的最小延迟在0 ... 1 ... 20ms的范围内。如果您希望等待几秒或十秒,这两个功能是正确的选择。
答案 2 :(得分:1)
如果您只想让线程等待一段固定的时间,请使用Sleep()
。但是如果你希望某些外部操作可以中断等待,你必须等待一些事情(参见SetTimer()
和Get/PeekMessage()
),这是一个事件(见CreateEvent()
和WaitForSingleObject()
),线程队列中的消息(请参阅PostThreadMessage()
和MsgWaitForMultipleObjects()
),I / O完成端口回调(请参阅PostQueuedCompletionStatus()
和GetQueuedCompletionStatus()
)等等。
答案 3 :(得分:0)
如果要阻止线程并等到特定时间,可以使用CreateWaitableTimer()
函数,然后在计时器句柄上使用WaitForSingleObject()
。
此功能也可以等待一段特定的时间段,WaitForMultipleObjects()
会让你阻止,直到定时器间隔和其他对象同时进行。