iOS: 零誤差或極小誤差的定時執行或順延強制?

來源:互聯網
上載者:User

標籤:ted   sel   大於   間隔   amp   十分   pat   res   date()   

問題如下:

節奏類遊戲需要執行很多的跟音樂節拍相關的操作,並且為了保證節奏感,需要讓操作跟節拍的關係十分緊密。對兩者間隔要求不能超過0.02秒或更低。

目前使用了 GCD 中的 asyncAfter(deadline:)方法,不過誤差總是要大於0.05秒,並且還無法保證誤差會不會傳遞下去。請問有更好的方式來解決誤差嗎?

var time = Date().timeIntervalSince1970let 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: 零誤差或極小誤差的定時執行或順延強制?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.