2016-12-12 2 views
0

私の質問はどうですか?返信0の後にdispatch_group_notifyが機能していますか?dispatch_group_notify gcdの後にコードを実行する方法は?

以下のコードを実行すると、今すぐ0が返されますが、すべてのgcdの作業が完了したので、dispatch_group_notifyを終了します。

int func() { 
    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,^{ 
    }); 
    dispatch_group_async(group, queue,^{ 
    }); 

    dispatch_group_notify(group, queue, ^{ 
    }); 
    return 0; 
} 

ここで、dispatch_group_notifyが完了するのを待つためにフラグを使用します。

dispatch_group_notify(group, queue, ^{ 
     flag = true; 
}); 

while(!flag) ; 
return 0; 

これは愚かです!誰でも私を助けることができます、ありがとう

答えて

1

通知を受け取ったときに呼び出すためにブロック/クロージャを使用する必要があります。それはこのように見えるはずです。

int func(block_type your_block) { 
    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,^{ 
    }); 
    dispatch_group_async(group, queue,^{ 
    }); 

    dispatch_group_notify(group, queue, ^{ 
     your_block() 
    }); 
} 
+0

void funMain(){int r = func(); printf( "%d"、r); }。この場合、rは無理なくすぐに表示され、dispatch_groupが完了するのを待ちません。 –

関連する問題