4

作成時間から 45 秒後に起動するように構成されたグローバル キューでタイマーを作成していますが、何らかの理由でまったく起動していないようです。今すぐ火に変更しても何も起こりません。

残りのアプリは多くのことを行っているため、おそらく何かがタイマーの起動を妨げている可能性があります。

タイマーの作成方法は次のとおりです。

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) 特定の時点でキューで実行するようにスケジュールされているすべての特定のタスクを一覧表示する方法はありますか?

アプリによって実行される作業の一部はシミュレーターで起動できないため、テスト デバイス自体でデバッグする必要があります。

4

2 に答える 2

1

定数は、unsigned long ではなく、unsigned long long である必要があります。これらに変更します。

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
于 2011-01-21T01:20:28.737 に答える