2016-12-12 5 views
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(); Е ("% d", г); }. В этом случае он будет печатать r как можно скорее и не дожидается завершения dispatch_group. –

 Смежные вопросы

  • Нет связанных вопросов^_^