iOS: 零误差或极小误差的定时执行或延迟执行?
2024-09-26 00:19:37
问题如下:
节奏类游戏需要执行很多的跟音乐节拍相关的操作,并且为了保证节奏感,需要让操作跟节拍的关系十分紧密。对两者间隔要求不能超过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
最新文章
- 【原】ajaxupload.js上传报错处理方法
- git以及git flow 的使用
- 2013 ACM/ICPC 长沙现场赛 C题 - Collision (ZOJ 3728)
- TCP头分析+面试题
- Windows下nc文件传输
- C# 运算符 if
- OpenCV学习(3)--Mat矩阵的操作
- HDU - 5036 Operation the Sequence
- XTU 1249 Rolling Variance
- 配置Windows为NTP服务器
- Linux网络文件系统的实现与调试
- 使用nifi采集数据要配置的环境
- SharedPreferences存储读取数据
- 解决org.hibernate.HibernateException: identifier of an instance of com.ahd.entity.Order was altered from2 to 0
- HTML+CSS写下拉菜单
- IntelliJIDEA永久注册使用
- Android-社会化分享
- flask日志
- Entity Framework 6.0 Tutorials(7):DbSet.AddRange &; DbSet.RemoveRange
- 线程协作-Semaphore并发限制