2012-02-19 15 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

+1

デッドロックが発生するため、既にキューに入っている場合は機能しません。 – OrangeDog

関連する問題