0

dispatch_afterを使用して6秒後にイベントを発生させようとしています。iOS dispatch_afterがすぐに起動しています

普通のdispatch_afterスニペット(Xcode自体に組み込まれています)を発射しています。

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration + 0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
    [do something]; 
}); 

durationは6秒です。しかし、[do something]は即座に実行されます(私はブレークポイントを持っています)。私はメインスレッド/メインキューにいます。私は間違って何をしていますか?

+0

NSET_PER_SECをNSEC_PER_MSECに変更し、MSECに期間を追加するか、この複製を確認してください: –

+1

[dispatch \ _after time triggersが重複している可能性があります](http://stackoverflow.com/questions/31949034/dispatch-after-time-トリガー - すぐに) –

+0

あなたは 'duration'の値を正確にどのように定義していますか –

答えて

0

これは単純な演算子優先エラーです。私の意図は期間パラメータを渡すことでしたが(0が渡された場合)、少量を追加します。 0.01があります。

私は(duration + 0.01) * NSEC_PER_SECを意味するように間違ってduration + 0.01 * NSEC_PER_SECを書いていますが、演算子の優先順位のためにduration + (0.01 * NSEC_PER_SEC)と解釈されています。私は括弧を追加して、それが正しく動作するようになりました。

関連する問題