1
for(int i = 1; i < 10000; i++) {
Command nextCommand = getNextCommandToExecute();
}

上記のプログラムを 60 分間実行したいと考えています。したがって、forループの代わりに、次のようなことをする必要があります-

long startTime = System.nanoTime();

    do{
    Command nextCommand = getNextCommandToExecute();
    } while (durationOfTime is 60 minutes);

しかし、このプログラムを 60 分間実行するにはどうすればよいかわかりません。

4

5 に答える 5

4

60 分間スリープして終了するバックグラウンド スレッドを起動します。

Runnable r = new Runnable() {
    @Override
    public void run() {
        try {
            Thread.sleep(60 * 60 * 1000L);
        }
        catch (InterruptedException e) {
            // ignore: we'll exit anyway
        }
        System.exit(0);
    }
}
new Thread(r).start();
<your original code here>
于 2012-05-22T18:47:25.787 に答える
2
long startTime = System.currentTimeMillis();
do 
{
  //stuff
} while (System.currentTimeMillis() - startTime < 1000*60*60);
于 2012-05-22T18:48:16.850 に答える
1

以下を試してください:

long startTime = System.currentTimeMillis();
long endTime = startTime + (60*60*1000);

while(System.currentTimeMillis() <= endTime) {
    Command nextCommand = getNextCommandToExecute();
}

この方法の欠点の 1 つは、Command実行しようとしている が 60 分のタイマーを過ぎて実行されるか、まったく終了しない場合です。この動作が許可されていない場合は、このループを実行しているスレッドを中断するスレッドを実装することをお勧めします。

于 2012-05-22T18:49:35.240 に答える
0

あなたが使用することができます:

long startTime = System.nanoTime();
do {
    Command nextCommand = getNextCommandToExecute();
} while ((System.nanoTime() - startTime) < 60 * 60 * 1000000000L);

は目盛りだけでなく、は経過時間、はシステム時間 (ウォールクロック)を測定するものとSystem.nanoTime()は若干異なりますのでご注意ください。システム時刻が変更された場合、期待どおりに動作しません。(ただし、返される値は UTC / GMT であるため、これはサマータイムの変更には適用されません。)System.currentTimeMillis()System.nanoTime()System.currentTimeMillis()System.currentTimeMillis()

1000000000Lナノ秒は 1 秒です。Lについてはご注意くださいlong。Java 7 では、より読みやすい1_000_000_000L.

于 2012-05-22T18:49:10.667 に答える
0
long startTime = System.currentTimeMillis();

do{
Command nextCommand = getNextCommandToExecute();
}while (startTime < startTime+60*60*1000);
于 2012-05-22T18:51:29.307 に答える