将来执行 - 时间以某种方式加倍

时间:2015-10-27 16:06:29

标签: java time

我很遗憾地提出这个问题,但我的代码出了问题。目前我正在使用命令模式,我想要一个命令类来在将来执行代码 - 让我们说将来2秒。问题不知何故是命令在5秒内执行,而不是在2 ???每次调用都会减少时间变量,直到变量为< = 0:

// 2 seconds in nanoseconds
private long timeLeft = 2000000000;

public boolean execute(final long delta) {
    this.timeLeft -= delta;
    if (this.timeLeft <= 0) {
        // execute
        this.timeLeft = 2000000000l;
    return true
    }
    return false;
}

使用lastExecution = System.nanoTime();,然后使用每个命令delta = System.nanoTime() - lastExecution;

github上的完整src:https://github.com/Sheldor5/JavaGPP

1 个答案:

答案 0 :(得分:0)

不是通过不准确的增量递减倒数计时器值,而是计算目标时间并检查它,并使用毫秒时间而不是纳秒时间来防止出现符号问题。

long targetMillis = System.currentTimeMillis() + 2000; // 2 sec
while (System.currentTimeMillis() < targetMillis) {
    // do something while we wait
}
// 2 secs elapsed, may be a bit more