c++ - 如何在不使用 join() 阻塞主线程的情况下创建多个 C++ 线程?

标签 c++ multithreading

我在 C++ 中有一个简单的 TCP 客户端/服务器,我目前正在为每个连接的用户生成一个线程来处理消息,但是我遇到了一些问题,我不确定如何解决它们,因为我不熟悉标准的 C++ 线程。

当客户端连接到服务器时,会为该客户端创建一个线程,直到它们断开连接为止

clientThread = thread(processMessages);
clientThread.join();

此线程将在客户端的生命周期内持续存在。正如我在此线程上调用 join() 时,当 client 2 连接而 client 1 仍处于连接状态时,它会被 join() 调用阻止。

删除此 join() 调用意味着当客户端断开连接时,线程被销毁,导致 terminate() 错误,因为它是可连接的。

我怎样才能让这个客户端线程只在后台处理,而主线程可以继续并接受新连接?

最佳答案

只是展示如何存储创建的 thread 对象:

std::vector<std::thread> threads;
threads.emplace_back(processMessages);
...
for (auto & t : threads) t.join();

但是,正如其他人在评论中指出的那样,为每个新连接创建一个线程可能不是最好的方法。

关于c++ - 如何在不使用 join() 阻塞主线程的情况下创建多个 C++ 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48630349/

相关文章:

c++ - boost::lexical_cast 到 std::string 什么时候失败?

c++ - 从初始化列表填充 boost::multi_array 的最佳方法是什么?

java - 当有多个线程时,跳出循环的最佳方法是什么?

c++ - #include<线程>,错误无法打开源文件 "thread"

multithreading - 请告诉我我的线程出了什么问题!

c++ - 如何在编译时检查内联函数的参数是否已知?

c++ - 无法将 TCHAR* 添加到 const char

c++ - fgetwc EOF 循环测试失败,但 65535 OK

multithreading - Perl崩溃: Wrong use of glob in threads?

Android Long-Service Create bg 线程,我不知道这是怎么回事