gpt4 book ai didi

java - 使用倒数计时器以特定时间间隔发出信号

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:26:57 24 4
gpt4 key购买 nike

现在我有一个像这样计时的 CountDownTimer:

MyTimer(60000, 1);

因此它以 1 毫秒的间隔递减 60 秒。我在计时器中发出 bpm 信号。

这是通过将每分钟除以一个 bpm 数来完成的:

public void onTick(long millisLeft) {
if (TimeUnit.MILLISECONDS.toSeconds(millisLeft) % (60 / bpm) == 0) {
doSignal();
}
}

这很好用,但前提是定时器设置为间隔 1000

MyTimer(60000, 1000);

这意味着它会每秒滴答一次(每 1000 毫秒)。但我需要它以 1 毫秒为单位滴答作响。

我的情况的问题是,如果计时器以 1 毫秒的间隔计时。它会在应该的时候启动信号 - 但会快速重复。

如果间隔为 1000 毫秒且 bpm 设置为 20,则它会每三秒发出一次蜂鸣声 (60/20 == 3)。如果间隔设置为 1 毫秒,它将每三秒开始发出哔哔声 - 并在这一秒内重复发出哔哔声。

因此,不知何故,我的情况在比我预期的 1 毫秒自动收报机间隔更大的范围内是正确的。

我如何设计我的条件,使其每 (60/bpm) 秒仅触发一次,定时器的间隔为 1 毫秒?

最佳答案

TimeUnit.MILLISECONDS.toSeconds(millisLeft)所有 57000 <= millisLeft <= 57999 返回 57所以在那一秒内你得到 1000 doSignal调用(如 57 % (60/20) == 0 )。 54、51、...也是如此。为避免这种情况,您可以改用此表达式 millisLeft % (60000/20) == 0 .

关于java - 使用倒数计时器以特定时间间隔发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23876524/

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