簡體   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