作成から45秒後に起動するように設定されたタイマーをグローバルキューに作成していますが、なんらかの理由で起動できないようです。今度はそれを変えても何もしません。DISPATCH_SOURCE_TYPE_TIMERが起動しない
残りのアプリには多くのことが起こっているので、タイマーの発射に先立つものがある可能性があります。
これはタイマーが作成された方法です。
dispatch_queue_t globalQueue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, globalQueue);
if (timer) {
// start 45 seconds for now
dispatch_time_t startTime = dispatch_time(DISPATCH_TIME_NOW, 45ull * NSEC_PER_SEC);
uint64_t interval = 15ull * NSEC_PER_SEC; // every 15 seconds, converted to nanosecs
// leeway:8 microseconds
dispatch_source_set_timer(timer, startTime, interval, 8000ull);
dispatch_source_set_event_handler(timer, block); // block is passed in
dispatch_resume(timer);
1)それは発射いない理由をデバッグ/フィギュアに試してみるための良い方法は何ですか?そうでない場合は、
2)特定の時点でキューで実行するようにスケジュールされているすべてのタスクをリストする方法はありますか?
アプリで行われた作業の一部をシミュレータで起動できないため、テストデバイス自体をデバッグする必要があります。
優先度をDISPATCH_QUEUE_PRIORITY_NORMALに変更すると、それは起動しますか?また、ブロックがNULLでないことを確認していると仮定します。 –
修正 - ブロックはNULLではなく、タイマーが起動する唯一の時間は、DISPATCH_QUEUE_PRIORITY_HIGHで構成されているときです。これは実行できません。だから私は低優先度のキューでブロックされているものを理解するためのツールがあるかどうか、またはすべてのコードをトレースする必要があるかどうかを判断しようとしています。 –
最低優先度で実行するように設定できる項目の数に制限はありますか? –