【发布时间】:2019-01-29 07:27:59
【问题描述】:
我已经实现了一个 TCP 套接字客户端,它连接到服务器并使用 boost::asio::read() 和 boost::asio::write() 调用。
有点像这样:
https://www.boost.org/doc/libs/1_63_0/doc/html/boost_asio/example/cpp11/chat/chat_client.cpp
但是,在我的实现中,我根本没有调用boost::asio::io_service::run(),并且套接字读/写仍然有效。在套接字客户端的上下文中,该服务的目的是什么?我需要运行服务吗?
【问题讨论】:
-
所以您的代码中没有像
std::thread t([&io_service](){ io_service.run(); });(从您链接到的源代码复制)这样的行吗?您能否创建一个minimal reproducible example 的您的代码给我们看? -
我的客户端正在使用 Qt 的事件循环,它只是实例化了服务。我的问题是 run 方法有什么作用?那是异步操作的事件循环吗?
-
io_service::run处理处理程序。处理程序是由在异步模式下工作的函数创建的,例如async_read,async_write,这些函数会立即返回,在您的情况下,asio::read不会创建任何处理程序,它是阻塞函数,因此无需运行 @ 987654331@ 调用处理程序。 -
@rafix07 我想你的意思是
asio::read?请将其转换为答案:) -
@juzzlin 是的,是错字。
标签: c++ boost boost-asio