我正在编写一个基于C ++的多线程聊天服务器。
当新客户端加入时,主线程会创建一个新线程来管理客户端。
我想在客户端断开连接时销毁线程,所以我正确设置了这个功能,这样当客户端发送退出消息时,会调用Terminate()。
但是Terminate(),它不是仅销毁单个线程,而是销毁了所有线程。
应该做什么,以便只销毁我想破坏的线程?
答案 0 :(得分:2)
你不必做任何特别的事。
std::thread
在其构造函数中获取可调用的参数,并且该调用是线程运行的函数。
如果该可调用在某个时刻结束,则分离的线程可以自我清理。 只需确保
简化设计可以与此类似:
while(server.is_on()){
auto client = server.acccept_client();
std::thread thread([client = std::move(client)]{
handle_client_until_disconnection(client);
});
thread.detach();
}
另一种方法是使用线程池。当应用程序启动时构造该线程池,并在应用程序退出时销毁它。