我知道這不是用來解答我的問題的最佳方式。在我的服務器中,一些問題基本上歸結爲此 - 一旦滿足conditionA,你如何從while循環中斷開?如果滿足條件B,是否可以銷燬特定的線程?如何從活動線程中斷開while循環
不幸的是,主線程永遠被recvfrom()函數阻塞,除非我可以從循環中斷開。
while (1)
{
recBytes = recvfrom(sock, packetBuff, 8, 0, (struct sockaddr *) &client, &SockLength);
std::thread TX([&]
{
//process packet task
if(conditionA == 1)
break from while loop
if(conditionB == 1)
destroy any active threads spawned by TX
.
.
.
much more tasks
});
TX.detach();
}
.
.
.
continue rest of code
在此先感謝!
你有沒有考慮過使用一些asio庫?想到boost.asio,但也有其他庫可用。儘管如上所述,從另一個線程關閉套接字是簡單而有效的,可以從recv_from退出,並檢查錯誤情況,因爲我希望你已經做到了。 break語句將退出循環。 –
我可以在YT上建議這個講座:「時間史:異步C++ - 史蒂文辛普森」嗎?在使用現代C++技術設計客戶端/服務器應用程序之前,這非常值得。無論您的應用需要多大尺寸。 –
@MichaëlRoy你介意在代碼中展示這看起來像什麼嗎? – djent