DISPATCH_SOURCE_TYPE_TIMER не стреляет

Я создаю таймер в глобальной очереди, настроенный на 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) Есть ли способ перечислить все заданные задачи, которые запланированы для выполнения в очереди в определенный момент времени?

Некоторая часть работы, выполняемой приложением, не может быть запущена на симуляторе, поэтому мне нужно выполнить отладку на самом тестовом устройстве.

2 ответа

У меня была похожая проблема. Я предполагаю, что ваш таймер является локальной переменной и освобождается сразу после настройки. Вы можете сделать это свойством класса.
Посмотрите здесь.

Ваши константы должны быть длинными без знака, а не длинными без знака. Изменить на эти:

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
Другие вопросы по тегам