boost :: asio :: io_service在线程中,不会在应用程序退出时退出

时间:2018-09-19 08:44:18

标签: c++ boost boost-asio

我有一个使用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来打破循环,我认为这是因为它一直在等待从未连接的客户端。

在接受者等待期间,如何正确杀死该线程?

1 个答案:

答案 0 :(得分:1)

您如何“尝试在客户端连接之前关闭应用程序”?

如果您使用常规方法,则可能会处理信号:

除此之外,原则上没有办法取消同步接受,但是您可以通过连接到自己的监听端来伪造它,从而使accept返回。