有人知道如何制作一个时间间隔为0.001的计时器吗?我在某处读到 Timer
的时间间隔不能低于 0.02,而我的计时器就是这样。
我的计时器:
timer = Timer.scheduledTimer(timeInterval: 0.001, target: self, selector: #selector(self.updateTimer), userInfo: nil, repeats: true)
@objc func updateTimer() {
miliseconds += 0.001
}
最佳答案
是的,时间间隔可以小于 0.02 秒。例如。 0.01秒的间隔很容易实现。但在 0.001 或 0.0001 秒时,您开始受到实际考虑的限制,即您在该时间段内可以完成多少工作。
但是,如果您的目标是在 UI 中表示某些内容,则几乎没有必要超过设备的每秒最大帧数(通常为 60 fps)。如果屏幕只能每 60 秒更新一次,那么计算得更频繁还有什么意义呢?这只是浪费了 CPU 周期。顺便说一句,如果我们试图实现最佳屏幕刷新率,我们会使用 CADisplayLink
,不是Timer
。它的工作原理就像计时器一样,但会以最佳速率刷新屏幕。
无论如何,更新的想法milliseconds
捕捉流逝的时间有点不可能。我们从来不会像这样更新“耗时计数器”,因为即使在最好的情况下,也无法保证频率。 (并且由于小数十进制值的二进制表示形式的限制,我们也很少希望像这样将浮点值相加。)
相反,如果我们想在 UI 中实现最快的更新,我们会保存开始时间,启动 CADisplayLink
,并且每次调用计时器处理程序时,计算耗时作为当前时间和开始时间之间的差。
现在,如果您确实需要一个非常精确的计时器,这是可以完成的,但您应该看到 Technical Note TN2169 ,展示了如何创建高精度计时器。但这更多的是一种边缘情况。
关于swift - 毫秒计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61232102/