我在写一个基于C++的多线程聊天服务器。如何销毁线程对象
当新客户端加入时,主线程创建一个新线程来管理客户端。
我想在客户端断开连接时销毁线程,所以我正确地设置了这个功能,以便当客户端发送退出消息Terminate()被调用时。
但Terminate(),而不是销毁只是单个线程,它销毁了所有的线程。
应该做什么,以便只有我想销毁的线程被销毁?
我在写一个基于C++的多线程聊天服务器。如何销毁线程对象
当新客户端加入时,主线程创建一个新线程来管理客户端。
我想在客户端断开连接时销毁线程,所以我正确地设置了这个功能,以便当客户端发送退出消息Terminate()被调用时。
但Terminate(),而不是销毁只是单个线程,它销毁了所有的线程。
应该做什么,以便只有我想销毁的线程被销毁?
你不必做任何特别的事情。
std::thread
在构造函数中获得一个可调用的参数,而callable是线程运行的函数。
如果这个callable在某个点结束,分离的线程可以自行清理。 只要确保
一个简单的设计,可与此类似:
while(server.is_on()){
auto client = server.acccept_client();
std::thread thread([client = std::move(client)]{
handle_client_until_disconnection(client);
});
thread.detach();
}
另一种方法是使用线程池。该线程池在应用程序启动时构建,并在应用程序退出时销毁。
Thankyou @David Hamim – Vedant
嗯。通常,线程从主函数返回时结束。 – Scheff
你确定这是你想要的设计吗?这是后来的可扩展性问题的秘诀 –
@David Hamim我正在为12年级计算机科学项目制作这个项目。 因此,可扩展性和效率并不是我关心的问题,因为我自己对自己的水平非常高级(课程大纲是C++基础知识,类,数据处理和链接列表堆栈和队列。) – Vedant