2014-09-11 75 views
3

比方說,我想在後面的時間來執行的代碼塊,所以我打電話dispatch_after像這樣:如何延遲dispatch_after排隊的塊的執行?

double delayInSeconds = 2.0; 
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
    /* code */ 
}); 

但是如果我想「暫停」我的程序之前執行甚至開始呢?假設我想在此次通話後1秒暫停程序,等待未知的時間。然後暫停後,我想恢復等待隊列中的2秒。因此,這將是這個樣子:

  • 呼叫dispatch_after以2秒的延遲
  • 1秒後,暫停節目未知時間
  • 恢復後,等待1秒,並執行塊(所以總的延遲時間是2秒)

是否有這樣做的一種方式?或者我應該使用另一種方法?

我知道dispatch_suspenddispatch_resume存在,但他們並不真正爲我工作(或者我只是不知道如何正確使用它們)。

的解決方案並不一定要涉及到塊,它也可能是延遲迴調到指定的功能。重點是我希望能夠暫停等待時間直到執行。

+0

我敢肯定這是不可能的。據我所知,一旦你發送了這個塊,就沒有辦法改變它的發送時間。暫停隊列也不會影響調度時間,它只會阻止一旦時間到了就運行該塊。 – 2014-09-11 05:02:28

+0

那麼你可以提出另一種方法嗎?也許延遲迴調函數?這也會很好。我其實想在動畫序列中使用它。首先我在屏幕上製作一些動畫,然後在2秒後我想執行一些代碼,這些代碼也可以做到這一點。它的偉大工程與'dispatch_after'但如果你發送的應用背景,然後把它帶回來(在動畫),定時搞砸了。塊內的代碼立即執行,而不是等待2秒。 – adam10603 2014-09-11 05:05:53

回答

0

把你的塊的方法

-(void)myMethod{ 
//implementation of the block 
} 
要調用該塊但在其2秒延遲

呼叫

[self performSelector:@selector(myMethod) withObject:nil afterDelay:2.0]; 

希望這有助於

+0

這給出了與'dispatch_after'相同的結果,但我仍然無法暫停2秒延遲。這是我的問題。 – adam10603 2014-09-11 05:21:23

+0

上面的方法,會停止2秒,然後在裏面啓動它的方法。 – 2014-09-11 05:29:08

+0

是的,但我希望能夠隨時暫停並恢復2秒延遲。 – adam10603 2014-09-11 05:36:50

1

你不能做到這一點,但有一個方式做類似的事情。

耽誤您的方法2秒時:

[self performSelector:@selector(yourMethod) withObject:nil afterDelay:2.0];

1秒鐘後,取消方法:

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(yourMethod) object:nil];

一個未知的時間後,記得你的方法,並延遲執行它1第二晚:

[self performSelector:@selector(yourMethod) withObject:nil afterDelay:1.0];

+0

不完全是我需要的不幸。 1秒-1秒的分割就是一個例子。中斷可能在2秒鐘內隨時發生。我不相信有沒有辦法在回調中暫停延遲。 – adam10603 2014-09-11 05:32:38

+0

也許如果我保存中斷髮生時的當前時間,然後計算恢復時的流逝時間,我可以簡單地檢查是否還有剩餘時間,並用餘下的時間調用另一個performSelector事物。我會嘗試 – adam10603 2014-09-11 05:34:56