LoginSignup
1
5

More than 5 years have passed since last update.

GCDを使った終了処理

Last updated at Posted at 2017-01-24

はじめに

GCDを使用したマルチスレッドで複数の処理が終了してから終了処理を実行したい!ので調べて書いてみました。
GCDの基本的な概要はこちらの記事が詳しく書いてありました。
http://qiita.com/ShoichiKuraoka/items/bb2a280688d29de3ff18

Dispatch Group

Dispatch Groupを使って終了処理を実装する方法
Global Dispatch Queue(並列)に 処理Blockを追加し実行がすべて終了したらMain Dispatch Queue(メインスレッド:直列)を実行する

サンプルコード

 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
 dispatch_group_t group = dispatch_group_create();

    dispatch_group_async(group, queue, ^{ NSLog(@"Block0"); });
    dispatch_group_async(group, queue, ^{ NSLog(@"Block1"); });
    dispatch_group_async(group, queue, ^{ NSLog(@"Block2"); });
    dispatch_group_async(group, queue, ^{ NSLog(@"Block3"); });

    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"Done!!");
    });

解説

dispatch_queue_t

  • dispatch_get_global_queue関数を使ってGlobal Dispatch Queueを生成しqueue変数に格納
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_group_t

  • dispatch_group_create関数を使ってDispatch Groupを生成しgroup変数に格納
dispatch_group_t group = dispatch_group_create();

処理Blockを追加

  • dispatch_group_async関数を使って処理を追加します
  • 第一引数には追加するDispatch Group を指定し、第二引数には実行する Queue を指定し最後に第三引数には実行したい処理を追加します。
    dispatch_group_async(group, queue, ^{ NSLog(@"Block0"); });
    dispatch_group_async(group, queue, ^{ NSLog(@"Block1"); });
    dispatch_group_async(group, queue, ^{ NSLog(@"Block2"); });
    dispatch_group_async(group, queue, ^{ NSLog(@"Block3"); });

終了処理を追加

  • dispatch_group_notify関数を使ってDispatch Groupに追加された処理が全て実行されたら実行する終了処理を追加します。
  • 第一引数には対象にするDispatch Groupを指定、第二引数には実行したい Queue を指定し、最後に第三引数に終了時に実行したい処理を追加
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"Done!!");
    });

実行結果

Blockの実行が並列なのでバラバラに実行されています。
Done. :champagne:

2017-01-24 10:32:32.599 [85966:2707092] Block0
2017-01-24 10:32:32.599 [85966:2707090] Block1
2017-01-24 10:32:32.599 [85966:2707105] Block2
2017-01-24 10:32:32.599 [85966:2707314] Block3
2017-01-24 10:32:32.605 [85966:2706860] Done!!
1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5