gpt4 book ai didi

c++ - 线程中的 boost::asio::io_service,在应用程序退出时不退出

转载 作者:行者123 更新时间:2023-11-30 04:56:39 25 4
gpt4 key购买 nike

我有一个应用程序使用 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 来跳出循环,我认为这是因为它一直在等待一个永远不会连接的客户端。

我怎样才能在接受者等待的时候正确地终止这个线程?

最佳答案

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

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

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

关于c++ - 线程中的 boost::asio::io_service,在应用程序退出时不退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52401736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com