可有人請我提供的,當你將使用信號量時使用DISPATCH_TIME_NOW VS DISPATCH_TIME_FOREVER的例子嗎?信號燈:DISPATCH_TIME_NOW VS DISPATCH_TIME_FOREVER
是什麼2之間和我會用什麼情況下,一個比其他的區別?
按照文檔DISPATCH_TIME_NOW裝置立即暫停。 DISPATCH_TIME_FOREVER表示超時無限。
爲什麼你想前者,即:立即暫停。
可有人請我提供的,當你將使用信號量時使用DISPATCH_TIME_NOW VS DISPATCH_TIME_FOREVER的例子嗎?信號燈:DISPATCH_TIME_NOW VS DISPATCH_TIME_FOREVER
是什麼2之間和我會用什麼情況下,一個比其他的區別?
按照文檔DISPATCH_TIME_NOW裝置立即暫停。 DISPATCH_TIME_FOREVER表示超時無限。
爲什麼你想前者,即:立即暫停。
您可以立即超時檢查,如果一個塊已完成計算。同樣,您可以永久等待,直到完成一個塊,然後繼續執行另一個塊。
如果一組完成看起來是這樣的檢查的一個例子。
if (dispatch_group_wait(myDispatchGroup, DISPATCH_TIME_NOW) == 0) {
// myDispatchGroup is finished...
} else {
// myDispatchGroup is _not_ finished...
}
檢查一個組是否完成等待永久沒有意義,因爲該函數將永遠等待。相反,我們使用該功能來同步阻塞(在暫停或等待時阻塞,而不是在GCD塊中),直到組完成。
// Enqueue myDispatchGroup
// Wait for it to finish
dispatch_group_wait(myDispatchGroup, DISPATCH_TIME_FOREVER);
// Do other work that depends on myDispatchGroup being completed
可以公平地說,DISPATCH_TIME_FOREVER用於組創建,而DISPATCH_TIME_NOW用於組查詢? – dubbeat
我不會說羣體「創造」,因爲等待永遠做的一件很常見的事情是使用'dispatch_release(group);'釋放羣體。我會稱之爲組依賴關係。 –
使調用「dispatch_group_wait(myDispatchGroup,DISPATCH_TIME_FOREVER);'是正確的做法的情況數量非常小。大多數時候這會阻止。阻塞主線程不好,阻塞GCD線程(可能)不好。使用'dispatch_group_notify'排隊一個塊,當你的組完成而不阻塞排隊線程時運行。 – ipmcc
您是指DISPATCH_TIME_NOW與DISPATCH_TIME_FOREVER? –
呃,對不起。這是一個錯字。現在更正 – dubbeat