gpt4 book ai didi

java - 使用持续时间为 1 毫秒且循环计数不定的时间线是否可以为秒表提供准确的时间?

转载 作者:行者123 更新时间:2023-12-01 16:49:22 31 4
gpt4 key购买 nike

我使用时间轴创建了一个简单的秒表,但我想知道它是否准确。这是代码:

LongProperty timeMillis = new SimpleLongProperty(0);
timer = new Timeline(new KeyFrame(Duration.millis(1), e -> timeMillis.set(timeMillis.get()+1));
timer.setCycleCount(Timeline.INDEFINITE);
timer.start();

我的问题是,在增加 timeMillis 的同时,每毫秒之间是否会有某种延迟?或者一次计算 1 毫秒导致某种延迟?

最佳答案

您的时间线方法将相当准确,但计算时间的频率远远高于 UI 能够呈现时间的频率。默认情况下,JavaFX 将帧渲染限制在每秒 60 帧,因此只有大约 6% 的 timemillis.set(...) 调用会在 UI 中呈现。

一种更有效的方法是使用 AnimationTimer,在 UI 渲染时执行计算,但频率不高。 AnimationTimer 有一个 handle() 方法,保证每个渲染脉冲精确执行一次:

LongProperty timeMillis = new SimpleLongProperty(0);

AnimationTimer stopwatch = new AnimationTimer() {

private static final long STOPPED = -1 ;
private long startTime = STOPPED ;

@Override
public void handle(long timestamp) {
if (startTime == STOPPED) {
startTime = timestamp ;
}
long elapsedNanos = timestamp - startTime ;
long elapsedMillis = elapsedNanos / 1_000_000 ;
timeMillis.set(elapsedMillis);
}

@Override
public void stop() {
startTime = STOPPED ;
super.stop();
}
};

现在只需调用 stopwatch.start()stopwatch.stop() 即可启动和停止计时器。您也可以添加一些 pause() 功能,这需要更多的工作...

关于java - 使用持续时间为 1 毫秒且循环计数不定的时间线是否可以为秒表提供准确的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43663323/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com