2017-03-15 3 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(deadline:delayTime)delayTimeがlongの場合はディスパッチしません。

私はアプリを実行し続けて、決してそれを殺しません。 10分の遅延時間中に電話がスリープ状態になります。しかし、私が電話を覚ました後、何かはまだ呼び出されていません。

スウィフト3では

+0

「delayTime」の計算方法を表示できますか? –

+0

私のプロジェクトでdelayTimeが – jiawen

答えて

0

、あなたはdeadlineのあなたの計算簡素化することができます -

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

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

必ずしもあなたが探している答えを、しかし、あなたがしている場合は、ソリューション

に近づく助けるかもしれませんミリ秒で時間が経過しました...

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

と計算される方法を含めるようにコードが更新されました。遅延時間は他の場所から渡され、msです。 – jiawen

関連する問題