【问题标题】:How to Destroy a thread object [duplicate]如何销毁线程对象[重复]
【发布时间】:2018-03-31 07:59:03
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 嗯。通常,线程从其主函数返回时结束。
  • 你确定这是你想要的设计吗?这是以后可扩展性问题的秘诀
  • @David Hamim 我正在为 12 年级的计算机科学项目制作这个项目。所以可扩展性和效率不是我关心的问题,因为我正在做的东西对于我的水平来说是非常先进的(教学大纲是 c++basics、类、数据处理和链表堆栈和队列。

标签: multithreading c++11 server winsock2


【解决方案1】:

你不必做任何特别的事情。

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

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

【讨论】:

  • 谢谢@大卫哈米姆
猜你喜欢
  • 2016-09-08
  • 2012-06-29
  • 2015-03-23
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 2012-07-09
相关资源
最近更新 更多