0

while() ループとブロッキング メソッドを組み合わせると問題が発生します。見やすくするために、while(true) + エスケープ条件を使用します。

while(true)
{
    //this is my blocking method 
    BlockingMethod();

    //do other things here

    //escape condition to get out of the loop
    if(escape_condition) { break; }

}

私の懸念は、スレッドが while() ループ内に入ると、ブロッキング メソッドでスタックし、抜け出すためのエスケープ条件に到達しないことです。どうすればこれに対処できますか?

また、私のコードはこれと同等だと思いますが、正しいですか?

while(!escape_condition)
{
    //this is my blocking method 
    BlockingMethod();

    //do other things here

}

それとも入口条件を満たしたブロッキング方式で糸が引っかかって出てこないのでしょうか?(ループ内にエスケープ条件を実装する必要があります。)

4

1 に答える 1

0

BlockingMethodはあなたがコントロールできないものだと思いますか?つまり、関数を変更してタイムアウト値を取得し、永久にブロックされないようにすることはできませんか?

そうでない場合で、そこでフリーズしたくない場合は、BlockingMethod()呼び出しを別のスレッドにスピンオフすることを検討する必要があります。次に、whileループを変更して、スレッドがまだ実行されているかどうかを確認し、必要に応じてスリープし、状況に時間がかかりすぎる場合は、スレッドを強制終了してベイルアウトします。

于 2013-01-02T22:21:01.750 に答える