2012-02-19 72 views
3

在iOS中我有一個應用程序,我需要等待GCD隊列上當前正在運行的塊完成。我的印象是,這行代碼將做到這一點:Grand Central Dispatch:如何等待塊的隊列完成?

dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{});

我從這裏這個提示:

http://www.fieryrobot.com/blog/2010/06/27/a-simple-job-queue-with-grand-central-dispatch/

據我瞭解,這行代碼會阻止子序列執行,直到全局隊列上運行的所有任務完成。在我的代碼中,這似乎並沒有發生。有人可以提出一個方法來做到這一點嗎?

感謝,
道格

回答

5

dispatch_sync()只會串行隊列工作,這是什麼,教程顯示。該dispatch_get_global_queue()返回併發隊列,看it's documentation note

塊提交到這些全局併發隊列可相對於彼此同時執行。

對付你應該使用在您提交您的塊一組,也該教程提到一個全球性的併發隊列,並等待整個組dispatch_group_wait()

+0

賓果。這確實是問題。切換到順序FIFO隊列現在有這個工作。非常感謝Grzegorz。 – dugla 2012-02-20 16:07:34

+1

如果您已經在隊列中,則它不起作用,因爲它會死鎖。 – OrangeDog 2014-12-18 17:31:52

相關問題