首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift中的高精度定时器

Swift中的高精度定时器
EN

Stack Overflow用户
提问于 2017-05-02 20:05:08
回答 1查看 3.2K关注 0票数 11

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

EN

回答 1

Stack Overflow用户

发布于 2017-05-02 20:48:44

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

代码语言:javascript
复制
var timer: DispatchSourceTimer!

然后使用makeTimerSource(flags:queue:)制作一个计时器(可能是一个不受合并、应用程序午睡等限制的计时器,并了解电源/电池/等等的影响)。

代码语言:javascript
复制
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()

注意,您应该优雅地处理定时器无法处理所需精度的情况。正如文档所说:

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

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43746336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档