如何销毁线程对象
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();
}
另一种方法是使用线程池。该线程池在应用程序启动时构建,并在应用程序退出时销毁。
我正在编写一个基于 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();
}
另一种方法是使用线程池。该线程池在应用程序启动时构建,并在应用程序退出时销毁。