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()永远不会被调用。
我保持应用程序运行,永远不会杀死它。手机在10分钟的延迟时间内进入睡眠状态。但是在我拿起电话后,仍然没有打电话。
有什么想法吗?
答案 0 :(得分:1)
在Swift 3中,您可以简化deadline
-
let delayTime = DispatchTime.now() + .seconds(60 * 60 * 1000)
DispatchQueue.main.asyncAfter(deadline: delayTime) {
doSomething()
}
不一定是您正在寻找的答案,但可能会帮助您更接近解决方案
如果您在几毫秒内过了一段时间......
let delayTime = DispatchTime.now() + .milliseconds(timeValue)