0

決定木を生成する大規模なネストされたループ (最大 6 層) があります。ただし、これは非常にタイム クリティカルなプログラムであるため、時間切れになったら生成を中止する必要があります。

ループごとにタイマーでチェックできるのは理解できますが、効率が落ちます。モニタースレッドまたは同様のメカニズムを使用することを考えていました。ループ全体のタイムアウトを設定してブレークする効率的な方法があるかどうかを知りたいです (おそらく「goto」句を使用)。

または、ネストされたループをネストされたスレッドにカットする必要がありますか?

4

3 に答える 3

2

時計の値をチェックするのはどれほど効率が悪いのでしょうか。System.currentTimeMillis()無視できるものであり、それが最も単純で最も効率的なオプションである可能性が高いと強く思います。

于 2013-02-06T15:02:39.760 に答える
1

最も内側のループでタイマーのチェックをテストし、それが遅すぎる場合は に移動し、遅Level 5すぎる場合はLevel 4...

于 2013-02-06T15:04:22.897 に答える
0

特定の時間制限内に終了しなかった場合に生成プロセス全体を停止したい場合は、すべてのループをスレッドに入れ、スレッドを特定の時間実行させ、終了していない場合は終了させることができます。これを行う方法は次のとおりです。

Thread generationThread = new Thread(){

    public void run(){
        // All your loops

        // You can check for isInterrupted and simply return to terminate the process
        if(isInterrupted()){
          return;
        }
    }
}
generationThread.start();
generationThread.join(MAX_TIME); // how long in ms this process is allowed to run
// Terminate the thread if it did not finish
if(generationThread.isAlive()){
   generationThread.interrupt();
}

このコードは説明のみを目的としており、必要に応じて変更してください。

于 2013-02-06T15:18:38.330 に答える