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