gpt4 book ai didi

c++ - 如何安全地停止 std 线程?

转载 作者:IT老高 更新时间:2023-10-28 23:16:17 24 4
gpt4 key购买 nike

我正在开发一个聊天服务器,我有一个问题。

如何安全地停止std::thread

这是很简单的问题,像这样。

thread t(&func);
t.join();

但是,如果 func 有无限循环,则连接不起作用。

这是我的来源。

void CServerSocket::AcceptRun(boost::asio::io_service &iosrv)
{
while (true)
{
auto sock = std::make_shared<boost::asio::ip::tcp::socket>(iosrv);
m_Acceptor->accept(*sock);

m_SocketList.push_back(std::make_shared<CConnectionSocket>(this, sock));
}
}

CServerSocket::~CServerSocket()
{
CLogManager::WriteLog("Stopping Server...");
m_Acceptor->close();
m_Acceptor.reset();

// m_AcceptThread.detach(); This is right?

CLogManager::WriteLog("Server Stoped!");
}

我很想知道。请帮我。谢谢。

最佳答案

您可以将合适的上下文传递给您的线程,其中可以包含一个指示是否该停止的标志。标志可能是 std::atomic<bool> .显然,您还需要设置通信以不无限期地等待数据,以便您有机会不时检查标志。

关于c++ - 如何安全地停止 std 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20681810/

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