多线程:调度组

来源:互联网 发布:知乎炸鱼为业 编辑:程序博客网 时间:2024/05/22 15:33
#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.}- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {    [self gcdDemo1];}- (void)gcdDemo {    // 获取一个队列    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);    // 创建一个组    dispatch_group_t group = dispatch_group_create();    dispatch_group_async(group, queue, ^{        // 来一组异步        NSLog(@"下载电影A");    });    dispatch_group_async(group, queue, ^{        // 来一组异步        [NSThread sleepForTimeInterval:2];        NSLog(@"下载电影B");    });    dispatch_group_async(group, queue, ^{        // 来一组异步        NSLog(@"下载电影C");    });    // NSNotification 通讯    // window : 下载完关机    dispatch_group_notify(group, queue, ^{        NSLog(@"下载完成");    });}// 调度组在工作中使用的并不多- (void)gcdDemo1 {    NSLog(@"start");    /*     dispatch_group_async(dispatch_group_t group, dispatch_queue_t queue, dispatch_block_t block)     {     dispatch_retain(group);     dispatch_group_enter(group); // 标记进入组     dispatch_async(queue, ^{     block(); // 执行任务     dispatch_group_leave(group); // 离开组     dispatch_release(group);     });     }     */    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);    dispatch_group_t group = dispatch_group_create();    /*     dispatch_group_enter 跟 dispatch_group_leave 必须要成对出现,才可以获取到通知     */    // 进入组    dispatch_group_enter(group);    // 执行异步操作    dispatch_async(queue, ^{        [NSThread sleepForTimeInterval:3];        NSLog(@"下载文件A");// block        // 离开级        dispatch_group_leave(group);    });    dispatch_group_enter(group);    // 执行异步操作    dispatch_async(queue, ^{//        [NSThread sleepForTimeInterval:1];        NSLog(@"下载文件B");// block        // 离开级        dispatch_group_leave(group);    });    dispatch_group_notify(group, queue, ^{        NSLog(@"下载完了");    });    // 同步等待多长时间 (网络请求,如果很长时间,请求不成功,超时)    dispatch_group_wait(group, dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC));    NSLog(@"end");}@end
0 0