dispatch_group_notify gcd后如何执行代码?

时间:2016-12-12 10:35:00

标签: ios grand-central-dispatch

我的问题是如何在功能 dispatch_group_notify 之后返回0

如果我运行下面的代码,它将立即返回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 个答案:

答案 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()
    });
}