我在C ++中有一个简单的TCP客户端/服务器,我目前正在为每个连接的用户生成一个线程来处理消息,但是我遇到了一些问题,我不知道如何解决它们,因为我不熟悉标准的C ++线程。
当客户端连接到服务器时,会为该客户端创建一个线程,直到它们使用
之类的东西断开连接p
此线程将在客户端的生命周期内持续存在。正如我在此主题上调用了join(),当客户端2 连接而客户端1 仍然连接时,它会被join()调用阻止。
删除此join()调用意味着当客户端断开连接时,线程将被销毁,从而导致 terminate()错误,因为它可以加入。
如果主线程可以继续并接受新连接,我怎样才能让这个客户端线程在后台进行处理?
答案 0 :(得分:3)
只展示如何存储已创建的thread
个对象:
std::vector<std::thread> threads;
threads.emplace_back(processMessages);
...
for (auto & t : threads) t.join();
但是,正如其他人在评论中指出的那样,为每个新连接创建一个线程可能不是最好的方法。