Reputation: 1208
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()
}
if delayTime is short, like 5 seconds, doSomething() will always be called. but if delayTime is long, say 10 min, doSomething() never gets called.
I keep the app running and never kills it. The phone goes to sleep during the 10 min delay time. But after I wake up the phone, doSomething is still not called.
Any thought?
Upvotes: 0
Views: 993
Reputation: 53121
In Swift 3, you can simplify your calculation of deadline
-
let delayTime = DispatchTime.now() + .seconds(60 * 60 * 1000)
DispatchQueue.main.asyncAfter(deadline: delayTime) {
doSomething()
}
Not necessarily the answer you're looking for, but may help you get closer to a solution
If you're passed a time in milliseconds…
let delayTime = DispatchTime.now() + .milliseconds(timeValue)
Upvotes: 1