私はそれが私の質問を語る最良の方法ではないことを知っています。私のサーバーでは、いくつかの問題が基本的にこれにまで及んでいます - conditionAが満たされたらwhileループからどのように壊れますか? conditionBが満たされていれば、特定のスレッドを破棄することは可能ですか?アクティブなスレッドで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++ - Steven Simpson」?最新のC++技術を使用してクライアント/サーバーアプリケーションを設計する前に、時間を割く価値があります。あなたが望むサイズのアプリなら何でも。 –
@MichaëlRoyこれはどうかのように見えるコードで私を見せてもらえますか? – djent