gpt4 book ai didi

c++ - 如何:使用 Boost::asio 在线程之间发布消息?

转载 作者:行者123 更新时间:2023-11-28 07:32:56 26 4
gpt4 key购买 nike

对不起我的英语

我四处搜索,但没有得到这个问题的答案:我有一个 Windows 应用程序项目,使用 boost 线程库。我想将消息(或调用回调)从工作线程发布到主 UI 线程。我研究了 boost::asio 中的示例,它们都在阻塞的主线程中使用,但我的 UI 线程是异步工作的。

你能帮帮我吗?非常感谢!

最佳答案

由于 UI 线程有自己的消息循环,您不能在其上下文中调用阻塞 io_service::run() 函数。您可以做的是将轮询 UI 相关方法与 io_service::poll_one() 交错:

  // WARINING: untested code
MSG msg;
while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
if (io_service_.stopped())
io_service_.reset();
error_code ec;
io_service_.poll_one(ec);
}

现在,当您将仿函数发布到 io_service_ 时,实际上是将它们发布到主 GUI 线程。

(当然,如果你使用一些GUI框架,你应该使用适当的框架方法而不是PeekMessage。)

关于c++ - 如何:使用 Boost::asio 在线程之间发布消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17311512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com