2017-03-15 14 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

相关问题