我在我的應用程序中的一個定時器之前用於定期啓動的任務(實際上是令牌刷新)。我在stackoverflow上找到代碼示例,它對我很有用。爲什麼通過大中央調度使用2個不同的定時器不起作用?
這是代碼示例定義(上面的實現報頭):
dispatch_source_t CreateDispatchTimer(double interval, dispatch_queue_t queue, dispatch_block_t block)
{
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
if (timer)
{
dispatch_source_set_timer(timer, dispatch_time(DISPATCH_TIME_NOW, interval * NSEC_PER_SEC), interval * NSEC_PER_SEC, (1ull * NSEC_PER_SEC)/10);
dispatch_source_set_event_handler(timer, block);
dispatch_resume(timer);
}
return timer;
}
這是變量定義:
dispatch_source_t _timer;
static double SECONDS_TO_FIRE = 60.000f;
,然後有一個方法例如startTimer
我在這裏推出了這個計時器:
- (void)startTimer {
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
_timer = CreateDispatchTimer(SECONDS_TO_FIRE, queue, ^{
// NSLog(@"timer is fired");
// do smth I need
}
});
}
所以這段代碼對我很好。
現在我需要另一個(秒)定時器爲單獨的任務,應該在自己的時間間隔內觸發。
所以我複製上面的代碼在單獨的類中,設置了另一個時間間隔。 面對如果我使用相同的名稱爲dispatch_source_t
- 如上面的CreateDispatchTimer
,應用程序將不會被編譯!
因此,對於單獨班級中的第二個計時器,我將dispatch_source_t
名稱更改爲另一個,如CreateTimerDispatch
。所以應用程序已成功編譯。
但問題是 - 只有第二個計時器現在工作!第一次沒有被解僱!
如何解決這個問題?現在可以理解爲什麼只有最後一個計時器被觸發
看起來它改變了第二個調度計時器的'timer'名字 - 然後在工作。現在測試。 –
有沒有一個(好)的理由,你沒有使用'NSTimer'? – Wain
它沒有爲我工作,因此我開始使用GCD,因爲我發現工作代碼 –