Boost.Asio Win32 Windows应用程序

时间:2014-02-09 03:20:15

标签: c++ multithreading boost

我使用Visual Studio向导创建了一个新的Win32 Windows应用程序。并将Boost.Asio添加到项目中。我想用deadline_timer每秒做一些重复的工作。虽然计时器(及其线程)运行良好,但我鼓励UI没有更新的问题,因为io_service.run()阻止了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线程而不是提升?

1 个答案:

答案 0 :(得分:0)

它不像Boost那样可移植,但是Windows已经提供了与消息循环集成的漂亮的事件API。

您可以使用CreateWaitableTimer并将GetMessage替换为MsgWaitForMultipleObjects。然后循环将唤醒传入消息或计时器。也可以使用其他类型的手柄。

当然,始终SetTimer会导致您收到WM_TIMER消息。但我更喜欢等待计时器。