【问题标题】:boost asio, post() to main thread?将 asio、post() 提升到主线程?
【发布时间】:2021-12-16 14:24:13
【问题描述】:

我使用boost::asio 作为通用异步后端。

我有多个线程运行一个io_context

但我遇到某些绑定到特定线程的操作。比如opencv的imshow必须从主线程调用。

发布到主线程或任何特定线程的最佳方式是什么? (无忙循环)

【问题讨论】:

    标签: c++ boost-asio


    【解决方案1】:

    你不能通过 asio 做到这一点。 您可以使用在主线程(如 Windows 消息)或其他特定线程中读取的消息队列。

    【讨论】:

    • 或者你可以使用多个io_context。其中一个正在主线程中运行。
    • 谢谢。有没有优雅的方式来运行两个 io_context 而不忙循环?
    • @somebody4:你通常这样做的方式是让所有线程调用 io_context::run(),这通常会阻塞。您将需要使用 executor_work_guard 来确保 io_context 上始终存在“工作”,因此 run 不会过早返回。在您的情况下,有两个上下文,线程可以发布到“帮助”上下文或“主”上下文。线程会阻塞,直到有函数对象要运行。
    • 或者,您可以让main 参与thread_pool (boost.org/doc/libs/1_78_0/doc/html/boost_asio/reference/…)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    相关资源
    最近更新 更多