我正在使用boost::asio
将数据传输到&从客户端到服务器。我在客户端有读取器线程来读取客户端上的套接字上接收到的数据。请注意,我在服务器端的客户端& boost::asio::write
上使用boost::asio::read
。 不使用async_read
或async_write
。一切都很好。如何在等待时取消`boost :: asio :: read`操作
但是,当我关闭我的应用程序,2 10倍的应用程序不干净地拆卸或关闭正常。它在关闭时被挂起问题如下:
当我的应用关闭期间析构函数被调用时,我的关闭函数被调用。以下是关闭功能的代码:
socket.cancel();
socket.close();
boost::system::error_code ec;
socket.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec);
的问题是,boost::asio::read
调用不返回时,它不会得到任何数据&一直等待就可以了。只要我可以取消它,这应该没问题。我正试图在其上执行socket.cancel
以在退出时取消所有读取操作。 但是,它似乎并没有工作。我在一些论坛上读到socket.cancel
只能取消async_read
的操作。是这样吗 ? 那么当我的应用程序需要退出时,取消boost :: asio :: read`操作的方法是什么?
好像我需要使用异步操作来解决此问题。托管此代码的我的C++正在基于UI的应用程序中使用,这在那里并不成问题,因为我认为发送'SIGINT'是为了在UI应用程序被终止时终止整个应用程序。当客户端应用程序是控制台应用程序时,这只是一个问题。无论如何,谢谢你的解释 –