我很遗憾地提出这个问题,但我的代码出了问题。目前我正在使用命令模式,我想要一个命令类来在将来执行代码 - 让我们说将来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
答案 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