【问题标题】:Do synchronous calls (e.g. tcp::socket.send) trigger pending async operations?同步调用(例如 tcp::socket.send)会触发挂起的异步操作吗?
【发布时间】:2019-08-29 15:07:05
【问题描述】:

快速提问:

假设我在 boost::asio::tcp::socket 上启动 async_receive(),然后稍后,我使用 socket.send(stuff) 启动阻塞(同步)写入。

这会触发任何待处理的async_receive(),还是我必须手动调用io_context 中的run() 函数?

【问题讨论】:

    标签: asynchronous boost-asio


    【解决方案1】:

    对于任何异步操作,您都需要启动主循环,即run()。但请注意,如果没有工作,它将立即返回。

    但是,当 asio poll reactor 等待 en 事件到达时,您可以做任何其他事情。

    所以,async_receive 将触发如果读取操作可用,无论您是同步还是异步写入套接字。

    换句话说,如果您同步写入套接字并且其他东西响应,您的async_receive 处理程序将被调用。单独写入不会。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-04
      相关资源
      最近更新 更多