2017-03-15 47 views
0
var maxCumulativeTime: Int32; 
maxCumulativeTime = 10 * 60 * 1000; 
let dispatchTimeNSEC = Int64(Double (maxCumulativeTime) * Double(NSEC_PER_MSEC)) 
let delayTime = DispatchTime.now() + Double(dispatchTimeNSEC)/Double(NSEC_PER_SEC) 
    DispatchQueue.main.asyncAfter(deadline: delayTime) { 
       doSomething()  
    } 

如果delayTime很短,比如5秒,doSomething()將總是被調用。 但如果delayTime很長,比如10分鐘,doSomething()永遠不會被調用。iOS DispatchQueue.main.asyncAfter(截止時間:delayTime)如果delayTime很長,請不要發送

我讓應用程序繼續運行,永遠不會殺死它。手機在10分鐘的延遲時間內進入休眠狀態。但是在我喚醒電話後,仍然沒有調用某些東西。

有沒有想法?

+0

你能告訴你如何計算'delayTime'嗎? –

+0

代碼已更新以包括如何在我的項目中計算delayTime, – jiawen

回答

0

在斯威夫特3,可以簡化您的deadline計算 -

let delayTime = DispatchTime.now() + .seconds(60 * 60 * 1000) 

DispatchQueue.main.asyncAfter(deadline: delayTime) { 
      doSomething()  
} 

不一定是你正在尋找,但可以幫助你接近的解決方案

如果你的答案通過了一個毫秒的時間...

let delayTime = DispatchTime.now() + .milliseconds(timeValue) 
+0

,delayTime從其他地方傳遞,並且以ms爲單位。 – jiawen

相關問題