首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost.Asio Win32 Windows应用程序

Boost.Asio Win32 Windows应用程序
EN

Stack Overflow用户
提问于 2014-02-09 03:20:15
回答 1查看 923关注 0票数 1

我使用Visual的向导创建了一个新的Win32 Windows应用程序。并将Boost.Asio添加到项目中。我想每秒钟使用它的deadline_timer做一些重复的工作。虽然计时器(和它的线程)工作得很好,但是由于io_service.run()阻塞了UI线程,所以我鼓励了UI没有更新的问题。在快速搜索之后,我找到了this thread。其实也是同样的问题!因此,我将代码移到GetMessage()循环中,并将io_service.run()更改为io_service.poll_one()。

代码语言:javascript
复制
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
    //Windows main loop stuff
    if (io.stopped())
        io.reset();
    io.poll_one();
}

嗯,它是有效的,但是只有在Windows消息等待的时候,这是很明显的。还有什么我能做的吗?或者我应该使用WinAPI线程而不是boost?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-09 03:31:48

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

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

当然,总有SetTimer会使您接收到WM_TIMER消息。但我更喜欢等待的计时器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21654834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档