io_service::run() 启动事件循环并处理传入和传出的网络事件。它会阻塞,直到满足某些条件:
处理程序是由 io_service 调用以执行异步操作或处理事件的回调。使用 async_ 函数启动的异步操作为 io_service 创建工作。
阻塞事件:
io_service::run( ) 当有工作要做或需要分派处理程序时会阻塞。例如:
解锁事件:
io_service::run()当满足以下所有条件时解锁:
当调用socket.async_receive()时,工作被添加到io_service以从套接字读取数据。 io_service::run() 将阻塞,直到接收到数据或发生错误,等待调用 handle_async_receive 回调。
示例中3a,使用io_service::work。该对象可防止 io_service 耗尽工作,确保执行 io_service::run() 的线程将继续运行。当工作对象被销毁时,io_service 耗尽工作,io_service::run() 解除阻塞。
一般建议避免混合同步和异步操作。这会使代码更加复杂且难以理解。可以使用 Boost.Asio 的 async_ 函数将同步操作转换为异步操作。
以上是Boost.Asio 的 io_service::run() 方法何时阻塞或解除阻塞?的详细内容。更多信息请关注PHP中文网其他相关文章!