我正在開發一個在後臺運行的應用程序。有時候我需要告訴用戶某些事情正在發生,所以我發出了一定數量的聲音。要做到這一點,我做了一個計時器,但問題是,它不能超過總延遲時間的10秒,之後,沒有更多的聲音(但應用程序仍在運行)。我已經在前景模式下檢查了這種行爲,並且它完美地工作。dispatch_after僅限於10秒?
這是我的代碼,當我需要告知用戶:
AudioServicesPlaySystemSound(alarma);
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
numAlarm = 1;
NSTimeInterval delay_in_seconds = 2.0;
dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW,delay_in_seconds*NSEC_PER_SEC);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_after(delay,queue,^{
[self fiBGTemps:ALARM];
});
和 「fiBGTemps」 是這樣的,
- (void)fiBGTemps:(int)sender
{
switch (sender){
case TEMP_SCAN:
(…)
break;
case ALARM:
if (numAlarm>0 && numAlarm<NUM_ALARM)
{
AudioServicesPlaySystemSound(alarma);
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
NSTimeInterval delay_in_seconds = 2;
dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW,delay_in_seconds*NSEC_PER_SEC);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_after(delay,queue,^{
[self fiBGTemps:ALARM];
});
numAlarm++;
}
break;
}
}
是這種行爲正常嗎?我錯過了什麼嗎?
感謝
Kanick
什麼是NUM_ALARM設置爲?也許這就是限制循環次數的原因。此外,在這裏看來,你有兩秒的延遲序列,而不是十秒延遲。 – aLevelOfIndirection 2013-04-30 09:43:14
Hi @aLevelOfIndirection,NUM_ALARM是一個常量,我設置了測試時間限制(#define NUM_ALARM 20)。通過這種方式,我可以看到聲音發出多少次。我測試的另一種方法是更改「delay_in_seconds」值。如果我將此值設置爲8(例如),它只播放2個聲音。如果我將此值設置爲12(超過10),它只播放一個聲音。 – Kanick 2013-04-30 09:59:38