無限ループを何度も実行する Java コードがあり、特定の条件下で、追加のステップ/関数呼び出しをループに挿入したいと考えています。
これらの変数をループの外で定義しました。
static boolean wait_activate = false;
static long wait_tmr = -1;
static int wait_delay = 6;
次に、無限ループで、追加のコードを有効にしたい場合:
if (some-condition) {
wait_activate = true;
System.out.println("activate");
wait_tmr = (System.currentTimeMillis() / 1000L);
}
ループの開始時に、追加のコードを挿入するための 2 つのチェックがあります。
if (wait_activate && (wait_tmr + wait_delay) < (System.currentTimeMillis() / 1000L)) {
// if wait period isn't over
do_additional_stuff();
}
if (wait_activate && (wait_tmr + wait_delay) > (System.currentTimeMillis() / 1000L)) {
// wait time is over:
System.out.println("Reset time: " + wait_delay);
System.out.println("Stored time: " + wait_tmr);
System.out.println("Current time: " + (System.currentTimeMillis() / 1000L));
wait_activate = false;
wait_tmr = -1;
}
現在、時間の値はすべて秒 / unixtime です。(currentTimeMillis / 1000 = 秒)。wait_delay
は 6 です。つまり、2 つprintln
の s は ( で) アクティブ化してから約 6 秒後にのみ実行する必要がありますwait_activate = true
。
ただし、出力は次のとおりです。
activate
Reset time: 6
Stored time: 946685043
Current time: 946685045
理由がわかりません。によると、6 秒待つ必要がありwait_delay
ます。ただし、保存された時刻と現在の時刻の差はわずか 2 秒です。wait_delay を増やしても。私は何か間違ったことをしていますか?これは Java のバグですか、それとも私が (しなければならない) 使用している (これを LEGO EV3 の LeJOS 0.9.0-beta で実行している) 奇妙な JRE バージョンのバグですか?
私は完全な「初歩的な間違い」を犯していて、それを見ていないのでしょうか? それとも何か他のものが壊れていますか?