Swift中的高精度计时器

时间:2017-05-02 20:05:09

标签: ios swift macos timer

Swift中用于控制外部硬件的精确时钟的最佳解决方案是什么?我需要编写一个循环函数,它可以以每秒设定的速率(数百或数千赫兹)可靠且高精度地发射。

1 个答案:

答案 0 :(得分:5)

您可以定义GCD计时器属性(因为与NSTimer / Timer不同,您必须保持自己对GCD计时器的强引用):

var timer: DispatchSourceTimer!

然后制作一个计时器(可能是.strict一个不受聚结,小睡等影响的计时器,并且需要了解makeTimerSource(flags:queue:)对电源/电池/等的影响。 :

let queue = DispatchQueue(label: "com.domain.app.timer", qos: .userInteractive)
timer = DispatchSource.makeTimerSource(flags: .strict, queue: queue)
timer.scheduleRepeating(deadline: .now(), interval: 0.0001, leeway: .nanoseconds(0))
timer.setEventHandler { 
    // do something
}
timer.resume()

注意,您应该优雅地处理计时器无法处理您正在寻找的精度的情况。正如documentation所说:

  

请注意,即使指定了余地值为零,所有计时器都会有一些延迟。