1

我需要在我的一个线程中等待一段时间,我开始考虑,WaitForSingleObject但它需要句柄来等待,尽管它可能需要超时输入;

可能会使用另一种解决方案SetTimer,但它似乎会创建WM_TIMER消息,但由于我在线程中,所以我没有更改来捕获该消息,所以我可以在这里使用什么吗?我可以使用Sleep吗?

4

4 回答 4

3

WM_TIMER 不是很可靠。这是一个低优先级的窗口消息,如果用户正在调整窗口大小(例如),则不会发送它。

我会说“睡眠”是最好的选择,但过去我使用过 WaitForSingleObject,因为它允许我传入一个句柄以在需要时取消等待操作。取决于你的设计。

于 2012-09-19T05:56:07.757 回答
2

正确的方法很大程度上取决于你的意思to wait some timeSleep 函数WaitForSingleObject 函数的精度基本相同。根据底层硬件和操作系统的版本,可实现的最小延迟在 0 .. 1 .. 20 毫秒的范围内。如果您只想等待几秒钟或十分之一秒,这两个功能是正确的选择。

等待更短的时间段,即毫秒范围内需要更详细的调查。有关更多详细信息,请参阅答案。

于 2012-09-19T07:51:41.073 回答
1

如果您只想让线程等待固定的时间,请使用Sleep()它。但是,如果您希望等待可以被某些外部操作中断,您必须等待某些东西,无论是计时器(参见SetTimer()Get/PeekMessage())、事件(参见CreateEvent()WaitForSingleObject())、线程队列中的消息(参见PostThreadMessage()MsgWaitForMultipleObjects())、 I/O 完成端口回调(参见PostQueuedCompletionStatus()GetQueuedCompletionStatus())等。

于 2012-09-19T20:31:59.017 回答
0

如果你想阻塞一个线程并等到一个特定的时间,你可以使用该CreateWaitableTimer()函数,然后WaitForSingleObject()在定时器句柄上使用。

这个函数也可以等待一个特定的时间段,并WaitForMultipleObjects()让你阻塞直到定时器间隔和其他对象同时。

于 2012-09-19T08:54:50.347 回答