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()
}
如果延迟时间很短,比如5秒,则将始终调用doSomething()。
但如果延迟时间很长,比如10分钟,doSomething()就永远不会被调用。
我一直在运行这个应用程序,从来没有杀死它。手机在10分钟的延迟时间内进入睡眠状态。但当我叫醒电话后,仍然没有打电话给doSomething。
有什么想法吗?
最佳答案
在Swift 3中,您可以简化deadline
的计算-
let delayTime = DispatchTime.now() + .seconds(60 * 60 * 1000)
DispatchQueue.main.asyncAfter(deadline: delayTime) {
doSomething()
}
不一定是你在寻找的答案,但可能有助于你接近解决方案
如果你的时间以毫秒为单位…
let delayTime = DispatchTime.now() + .milliseconds(timeValue)
关于ios - 如果延迟时间很长,iOS DispatchQueue.main.asyncAfter(deadline:delayTime)永远不会调度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42821609/