作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在开发一个聊天服务器,我有一个问题。
如何安全地停止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/
我是一名优秀的程序员,十分优秀!