【发布时间】:2019-08-29 15:07:05
【问题描述】:
快速提问:
假设我在 boost::asio::tcp::socket 上启动 async_receive(),然后稍后,我使用 socket.send(stuff) 启动阻塞(同步)写入。
这会触发任何待处理的async_receive(),还是我必须手动调用io_context 中的run() 函数?
【问题讨论】:
快速提问:
假设我在 boost::asio::tcp::socket 上启动 async_receive(),然后稍后,我使用 socket.send(stuff) 启动阻塞(同步)写入。
这会触发任何待处理的async_receive(),还是我必须手动调用io_context 中的run() 函数?
【问题讨论】:
对于任何异步操作,您都需要启动主循环,即run()。但请注意,如果没有工作,它将立即返回。
但是,当 asio poll reactor 等待 en 事件到达时,您可以做任何其他事情。
所以,async_receive 将触发如果读取操作可用,无论您是同步还是异步写入套接字。
换句话说,如果您同步写入套接字并且其他东西响应,您的async_receive 处理程序将被调用。单独写入不会。
【讨论】: