如何销毁线程对象

时间:2017-10-19 09:52:57

标签: multithreading c++11 server winsock2

我正在编写一个基于C ++的多线程聊天服务器。

当新客户端加入时,主线程会创建一个新线程来管理客户端。

我想在客户端断开连接时销毁线程,所以我正确设置了这个功能,这样当客户端发送退出消息时,会调用Terminate()。

但是Terminate(),它不是仅销毁单个线程,而是销毁了所有线程。

应该做什么,以便只销毁我想破坏的线程?

1 个答案:

答案 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();
}

另一种方法是使用线程池。当应用程序启动时构造该线程池,并在应用程序退出时销毁它。