タグ

APIとGCDに関するBowz13のブックマーク (4)

  • Grand Central Dispatch その4 group | Objective-Audio

    前回紹介したdispatch_applyはブロックの処理が終わるまで待ってくれていましたが、dispatch_asyncは別スレッドで処理されてしまうので、どの順番で処理されるのかも分からない状態でブロックを処理させっぱなしになってしまいます。 グループというのを使えば、asyncで処理する複数のブロックをひとつのグループにまとめて、それらのブロック全部が終わったタイミングを受け取る事が出来ます。 まず、グループを作る関数がこれです。 dispatch_group_t dispatch_group_create(void); 次に、グループで処理させたいブロックを渡すのがdispatch_group_asyncです。グループはasyncオンリーでsyncはありません。 void dispatch_group_async(dispatch_group_t group, dispatch_qu

  • Grand Central Dispatch その3 apply | Objective-Audio

    前回のコードのように同じ処理をforループでキューに渡すようなとき、それ専用の関数がディスパッチには既に用意されています。dispatch_applyです。 void dispatch_apply(size_t iterations, dispatch_queue_t queue, void (^block)(size_t)); iterationsの数だけブロックをキューに渡して処理させます。ブロックはsize_tの引数を一つだけ持ち、よくあるforループと同じように0から1ずつ増やした値が渡されます。 まずは、サンプルコードです。 #include <stdio.h> #include <dispatch/dispatch.h> int main (int argc, const char * argv[]) { dispatch_queue_t queue = dispatch_ge

    Bowz13
    Bowz13 2013/04/21
    Grand Central Dispatch その3 apply
  • Grand Central Dispatch その2 Queue | Objective-Audio

    Queueを作る ディスパッチの基的な使い方は、処理したいコードをブロックや関数で用意しておいて、キューにそのブロックや関数を渡すという流れになります。 ディスパッチのキューには2種類あります。アプリ(OS?)に最初から一つ用意されているグローバルキューと、自分で作るキューです。グローバルキューは並列に処理できますが、自分で作るキュー(以後シリアルキューと書いて区別します)は入れていった順番に直列でしか処理できません。 キューはdispatch_queue_tという型のオブジェクトで表されます。ディスパッチのオブジェクトは他にもいくつかありますが、それは次回以降に後回しにします。 グローバルキューを取得するにはこの関数を使います。 dispatch_queue_t dispatch_get_global_queue(long priority, unsigned long flags);

    Bowz13
    Bowz13 2013/04/21
    Grand Central Dispatch その2 Queue
  • Grand Central Dispatch その1 Block | Objective-Audio

    Grand Central Dispatchについて日語で丁寧に詳しく説明してくれるサイトはないかなぁと待っていたのですが、待っている間にひととおり自分なりに調べ終えてしまったので、まとめて書いておきます。まちがいに気がついたらご指摘いただけるとうれしいです。 Grand Central Dispatch(以下ディスパッチと書きます。リファレンスとか関数名とかGrand Centralって全然ついていなくてDispatchだけですし。)とはなんぞやというと、Snow Leopardから導入された並列処理のAPIです。並列処理といえばLeopardではNSOperationというObjective-CのAPIが導入されましたが、ディスパッチはC言語のAPIとして用意されていて、システムに近い低レベルなところで使えるものです。 あれこれ試した印象で言うと、コアが2つしかないCPUMacでた

    Bowz13
    Bowz13 2013/04/21
    Grand Central Dispatch その1 Block
  • 1