繁体   English   中英

Java时间测量不正确

[英]Java time measurement incorrect

我有一个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); 
}

在循环的开始,我进行了两次检查以插入其他代码:

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。这意味着,两个println只能在激活后(使用wait_activate = true )大约6秒钟后执行。

但是,输出是这样的:

activate
Reset time: 6
Stored time: 946685043
Current time: 946685045

我不明白为什么。 根据wait_delay ,它应该等待6秒。 但是,存储时间与当前时间之间的差仅为2秒。 即使我增加了wait_delay。 难道我做错了什么? 这是Java还是我(必须)使用的怪异JRE版本中的错误(在LEGO EV3的LeJOS 0.9.0-beta上运行)?

我在犯一个完整的“初学者错误”,只是看不到它吗? 还是那里有其他东西坏了?

看起来问题出在比较运算符上,第一个if条件应具有>而不是<,而第二个if条件应包含<而不是>。 您还可以将第二个“ if”条件转换为第一个“ if”条件的“ else”,以避免进一步的混乱。

当wait_activate为ON时,您可能不希望以下分配在无限循环内反复发生。 如果条件有所帮助,也许可以将这项作业包装在正确的位置。

wait_tmr =(System.currentTimeMillis()/ 1000L);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM