我正在开发一个聊天服务器,我有一个问题。如何安全停止std::thread
?如何安全地停止std线程?
这是很容易的问题,像这样。
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!");
}
我非常想知道。 请帮帮我。 谢谢。
'join'实际上工作得很好。它记录了阻止行为的事实并不意味着它不起作用。 – chris
我相当肯定,关闭受体应该引起呼叫'accept'抛出一个异常,并退出循环。直到加入线程之后才删除接受者。 –
设置条件变量和加入,线程需要检查的条件变量和清理和死,如果它被设置 –