Как функционировать dispatch_group? - PullRequest
0 голосов
/ 17 октября 2019

Я использую dispatch_group в своем коде, но его функциональность мне не понятна.

Я использовал приведенный ниже код:

1.dispatch_group_t group = dispatch_group_create();
2.dispatch_group_enter(group);
3.[self exportVideoAsset:avAsset withRange:CMTimeRangeMake(start1, duration1) inGCDGroup:group];

4.dispatch_group_enter(group);
5.[self exportVideoAsset:avAsset withRange:CMTimeRangeMake(start2, duration2) inGCDGroup:group];

Здесь сначала выполняются строки 2 и 4, а затем выполняются функции exportVideoAsset в строках 3 и 5. Но здесь, в строках 3 и 5, функция exportVideoAsset имеет видвыполнить без последовательного заказа. Но я хочу, чтобы функция exportVideoAsset в строке 3 всегда сначала выполнялась, а затем выполнялась строка 5.

1 Ответ

0 голосов
/ 17 октября 2019

Вы можете попробовать это всегда сначала вызывать block1, а затем после вызова block2.

Работает нормально на Xcode 11, iOS13

dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^ {
    // block1
    NSLog(@"Block1");
});

[NSThread sleepForTimeInterval:1.0];
dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^ {
    // block2
    NSLog(@"Block2");
});

или

dispatch_group_t group = dispatch_group_create();

dispatch_group_enter(group);
    // Task is completed, so signal that it has finished
    NSLog(@"Block1");
    dispatch_group_leave(group);

// Make the second task wait until group1 has completed before running
dispatch_group_enter(group);
    // Task is completed, so signal that it has finished
    NSLog(@"Block2");
    dispatch_group_leave(group);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...