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

时间:2018-02-05 19:46:16

标签: c++ multithreading

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

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

之类的东西断开连接
p

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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