1

我有我的 C++ 程序。主线程创建一个专用于仅处理 websocket 的新线程。这个新线程使用例如 boost beast 的 async_read() 调用进行读写。这很像https://www.boost.org/doc/libs/1_69_0/libs/beast/example/websocket/server/async/websocket_server_async.cpp,其中每个异步调用都会引发另一个异步调用。

但是,什么是让主线程告诉 websocket 线程关闭的惯用方法,因为可能总会有一些异步读取或写入调用未完成,例如 async_read() 空闲等待服务器最终发送数据。关闭需要执行诸如取消剩余的 async_read() 之类的操作,而不会引入某种竞争条件,即在取消之前开始读取。

4

1 回答 1

1

用于将boost::asio::postlambda 发布到调用底层. 挂起的操作将立即完成。在完成处理程序中,您可以检查是否应该尝试新的异步调用。io_contextstrandcancelbasic_socketboost::asio::error::operation_abortedbasic_socket::is_open

于 2019-01-10T00:13:40.560 回答