我在 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/