繁体   English   中英

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

[英]How do I create multiple C++ threads without blocking the main thread using join()?

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

当客户端连接到服务器时,将为该客户端创建一个线程,直到它们使用类似的东西断开连接

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

该线程将持续客户端的生命周期。 由于我在此线程上调用了join(),当客户端2连接而客户端1仍然连接时,它被join()调用阻止。

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

如何在主线程可以继续并接受新连接时,如何使此客户端线程在后台进行处理?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM