如何销毁线程对象

How to Destroy a thread object

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

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

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

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

应该怎么做才能只销毁我想销毁的线程?

您不需要做任何特别的事情。

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

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