boost::asio::io_service 在线程中,不会在应用程序退出时退出
boost::asio::io_service in thread, does not exit on application exit
我有一个使用boost::asio::io_service
来侦听客户端连接的应用程序。我正在线程中运行它,循环如下:
static auto const flags = boost::archive::no_header | boost::archive::no_tracking;
while (!_exit)
{
boost::asio::io_service ios;
boost::asio::ip::tcp::endpoint endpoint
= boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 4444);
acceptor = new boost::asio::ip::tcp::acceptor(ios, endpoint);
boost::asio::ip::tcp::iostream stream;
// program stops here until client connects.
acceptor->accept(*stream->rdbuf());
//grab the incoming data using
boost::archive::binary_oarchive archive(*stream);
archive << data;
}
如果客户端连接,数据就会进来,一切都很好。如果我尝试在客户端连接之前关闭应用程序,线程不会死亡。 我无法使用_exit = true
来打破循环,我认为这是因为它被困在等待永远不会连接的客户端。
如何在接受器等待时正确终止此线程?
如何"尝试在客户端连接之前关闭应用程序"?
如果您使用的是常规方法,则可以处理信号:
- https://www.boost.org/doc/libs/1_68_0/doc/html/boost_asio/reference/signal_set.html
除此之外,原则上没有办法取消同步接受,但您可以通过连接到自己的侦听端来伪造它,从而使accept
返回。
相关文章:
- C++控制台应用程序阻止退出
- boost::asio::io_service 在线程中,不会在应用程序退出时退出
- 我在哪里编写在退出 C++ 窗口窗体应用程序之前执行的代码部分
- 正确退出 gtkmm 应用程序
- OpenGL 应用程序退出,退出代码为 -1073741515 (0xC0000135)
- 即使主窗口关闭,也不会退出应用程序
- 对 QMainWindow 使用 std::unique_ptr 时退出时出现 QT 应用程序分段错误
- 我如何使Ctrl Q退出一个没有Menubar的QT5应用程序
- C++11 监视器类,测试应用程序不想退出
- 仅在我退出应用程序后,使用Cout.write()函数在控制台上打印字符串
- 当我要退出应用程序时,如何在QT中自动调用destructor
- 在另一个线程正在运行的情况下退出应用程序时出错
- 在退出应用程序时安全退出Qt线程
- c++允许后台线程在退出应用程序之前完成
- QT/C++,OS X:退出应用程序时可选择隐藏(),以便应用程序继续运行,并在单击dock中的图标后再次显示
- 退出应用程序时崩溃
- 在某些设备上退出应用程序后仍保留进程
- 退出应用程序前关闭线程
- Win32 c++ openprocess应该返回null,如果用户已经退出应用程序,但没有
- 日志文件不可见,除非用户退出应用程序