iOS: 零误差或极小误差的定时执行或延迟执行?

Posted 敏捷人生@cnblogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS: 零误差或极小误差的定时执行或延迟执行?相关的知识,希望对你有一定的参考价值。

问题如下:

节奏类游戏需要执行很多的跟音乐节拍相关的操作,并且为了保证节奏感,需要让操作跟节拍的关系十分紧密。对两者间隔要求不能超过0.02秒或更低。

目前使用了 GCD 中的 asyncAfter(deadline:)方法,不过误差总是要大于0.05秒,并且还无法保证误差会不会传递下去。请问有更好的方式来解决误差吗?

var time = Date().timeIntervalSince1970
let dq = DispatchQueue(label: "queue", qos: .userInitiated, attributes: [.concurrent, .initiallyInactive])
            dq.async {
                self.audioPlayer.play()
                time = Date().timeIntervalSince1970
            }
            dq.asyncAfter(deadline: .now() + 0.43, execute: {
                let res = Date().timeIntervalSince1970
                print(" 误差: \(res - time)")
                
            })

以下是多次运行控制台打印结果(该数字指的是实际间隔,与期望间隔的0.43相差甚远,且不稳定):

技术分享

技术分享

技术分享


iOS: 零误差或极小误差的定时执行或延迟执行? >> ios

这个答案描述的挺清楚的:
http://www.goodpm.net/postreply/ios/1010000008928622/iOS零误差或极小误差的定时执行或延迟执行.html



以上是关于iOS: 零误差或极小误差的定时执行或延迟执行?的主要内容,如果未能解决你的问题,请参考以下文章

一种异步延迟队列的实现方式

使用绘图子图时绘制自定义误差线

基于Redisson实现延迟队列

减弱或消除误差的办法

你真的分得清系统误差随机误差和偶然误差吗?(含例题)

毫秒级定时任务定时执行定时任务执行软件 —— 定时执行专家