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