【发布时间】:2021-02-21 20:48:25
【问题描述】:
我正在开发一个计时器,它需要进行一些计算并以一定的时间间隔运行一些功能。我试图保持尽可能大的间隔,但我需要它是一种细粒度的。
这里是周期性计时器,其中包含一些需要发生的事情。 如您所见,如果满足某些条件,每一秒(经过 % 1000 == 0 的毫秒数)它都会做一些事情。但我也需要每隔 10 毫秒检查一次。
这似乎有点过分了,在运行计时器 2 分钟后,它已经落后了 1 秒。我想我是以错误的方式接近这个。我可以/应该以某种方式将所有逻辑放在一个只运行异步的函数中,以便计时器可以继续运行。
如果计时器显示不时拖动几毫秒,如果它稍后赶上,这不是世界末日。但是现在整个计时器只是拖着。
_timer = Timer.periodic(Duration(milliseconds: 10), (timer) {
passedMilliseconds = passedMilliseconds + 10;
// METRONOME BEEP AND BLINK
if (passedMilliseconds % currentTimerSettingsObject.milliSecondDivider == 0) {
_playMetronomeBeep();
_startMetronomeBlink();
}
// ONE SECOND
if (passedMilliseconds % 1000 == 0) {
secondsDuration--;
// COUNTDOWN
if (secondsDuration < currentTimerSettingsObject.countDown + 1) {
_player.play('sounds/beep.mp3');
}
// SET COUNTDOWN START VALUES
if (secondsDuration == currentTimerSettingsObject.countDown) {
isCountdown = true;
}
notifyListeners();
}
// TIME IS UP
if (secondsDuration < 0) {
switchToNextTimer();
notifyListeners();
}
});
}
【问题讨论】:
-
如
Timer类API 中所述,您应该使用Stopwatch来测量经过的时间。这比尝试保持自己的时间计数器逻辑要好得多。Stopwatch的 API 文档可以在这里找到:api.dart.dev/stable/2.10.5/dart-core/Stopwatch-class.html
标签: flutter dart asynchronous timer