0

我计划使用计时器事件每秒触发一次(用于时钟应用程序)。

我可能错了,但我认为实际系统时间可能存在(非常轻微的)同步问题。例如,当实际系统时间毫秒为 500 而不是 0 时,计时器事件可能会触发(这意味着如果您愿意,秒数将部分“异相”)。

有没有办法将计时器事件与实时同步,或者在 AS3 中的一秒滴答声时触发某种系统时间事件?

另外,如果我将 Timer 设置为每 1000 毫秒触发一次,这是保证还是可以根据应用程序负载进行一些偏移?

这些可能是微不足道的问题,但我只是好奇。

谢谢。

4

3 回答 3

1

您可以使用Date获取当前时间。如果你真的想要,你可以尝试通过将它与 Date 返回的内容对齐来控制你的计时器抖动。我不确定这甚至会成为一个问题(当然,如果您的应用程序没有长时间运行,即使那样我也不确定错误会构建得太快)。

请注意,操作系统通常只能精确到几毫秒,如果您需要这种精确度,您可能需要做其他事情。

于 2010-04-19T16:01:34.387 回答
0

我只是想到了一种简单的方法,至少可以提高计时器的准确性。通过简单地减少 Timer 间隔,最大误差范围就会减少。

因此,将 Timer 设置为每 100 毫秒而不是 1000 毫秒触发一次会导致最大错误为 99 毫秒而不是 999 毫秒。因此,根据所需的精度/性能,可以调整这些值。

如果定时器频率必须保持 1 秒,我们可以创建一个临时初始化定时器,它以非常快的间隔(约 1 毫秒)触发。然后在每个滴答声中,我们都会跟踪当前时间和上一次时间。如果时间的秒数发生了变化(实际时钟发生了变化),那么我们可以在那一刻触发主定时器(1000 毫秒)。这将确保 1 秒计时器在实时秒数变化时启动(以个位数毫秒而不是 3 位数毫秒出现错误)

当然,再一次,从检测到时间变化到计时器启动之间会有一些延迟。但是至少可以在保留1s的Timer的同时提高精度。

我将在这周的某个时间尝试一下并报告。

于 2010-04-20T18:14:23.650 回答
0

不幸的是,我不认为 Timer 可以保证保持相同的速度。它很可能会在一段时间内漂移(例如,如果您将其设置为 1000 毫秒,它可能会每 990 毫秒触发一次,这是一个非常小的差异,但随着时间的推移它会加起来)。我认为你应该按照你说的做,每 100 毫秒左右触发一次,然后检查 Date 对象以确定是否已经过了一秒钟。

于 2010-04-22T23:39:31.030 回答