我正在全局队列上创建一个计时器,配置为从创建时间开始 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)有没有办法列出计划在特定时间点在队列上运行的所有给定任务?
该应用程序完成的某些工作无法在模拟器上启动,因此我需要在测试设备本身上进行调试。