我正在開發一個聊天服務器,我有一個問題。如何安全停止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'拋出一個異常,並退出循環。直到加入線程之後才刪除接受者。 –
設置條件變量和加入,線程需要檢查的條件變量和清理和死,如果它被設置 –