我使用Visual的向导创建了一个新的Win32 Windows应用程序。并将Boost.Asio添加到项目中。我想每秒钟使用它的deadline_timer做一些重复的工作。虽然计时器(和它的线程)工作得很好,但是由于io_service.run()阻塞了UI线程,所以我鼓励了UI没有更新的问题。在快速搜索之后,我找到了this thread。其实也是同样的问题!因此,我将代码移到GetMessage()循环中,并将io_service.run()更改为io_service.poll_one()。
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
//Windows main loop stuff
if (io.stopped())
io.reset();
io.poll_one();
}嗯,它是有效的,但是只有在Windows消息等待的时候,这是很明显的。还有什么我能做的吗?或者我应该使用WinAPI线程而不是boost?
发布于 2014-02-09 03:31:48
它不像Boost那样可移植,但是Windows已经提供了与消息循环集成的很好的事件API。
您可以使用CreateWaitableTimer并将GetMessage替换为MsgWaitForMultipleObjects。然后循环将唤醒传入的消息或计时器。其他类型的句柄也可以使用。
当然,总有SetTimer会使您接收到WM_TIMER消息。但我更喜欢等待的计时器。
https://stackoverflow.com/questions/21654834
复制相似问题