zoukankan      html  css  js  c++  java
  • GCD其他实用场景

    GCD线程间通信

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_async(queue, ^{
            
            NSLog(@"开来一个新线程--%@",[NSThread currentThread]);
            
            // 回到主线程显示图片
            dispatch_async(dispatch_get_main_queue(), ^{
                NSLog(@"--imageView--%@", [NSThread currentThread]);
                self.iconView.backgroundColor = [UIColor redColor];
            });
        });
    GCD组线程

    当需要在两个线程的任务执行完后,执行另一个动作,就将这两个线程放到线程组中

    // 创建一个组
        dispatch_group_t group = dispatch_group_create();
        
        // 开启一个线程 执行费时操作1
        __block int num1;
        dispatch_group_async(group, global_queue, ^{
            NSLog(@"执行费时操作1");
            num1 = 30;
        });
        
        // 开启一个线程 执行费时操作2
        __block int num2;
        dispatch_group_async(group, global_queue, ^{
            NSLog(@"执行费时操作2");
            num2 = 44;
        });
        
        // 费时操作1、费时操作2 会同时执行
        
        // 等group中的所有任务都执行完毕, 再回到主线程执行其他操作
        dispatch_group_notify(group, main_queue, ^{
            NSLog(@"回到主线程敢点活");
            NSLog(@"num1 + num2 = %d",num1 + num2);
            self.countResult.text = [NSString stringWithFormat:@"%d",num1+ num2];
        });
    GCD实现延迟执行
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            NSLog(@"这是延迟打印出来的东西,还可以自定义线程哦");
        });
    GCD实现 代码只执行一次
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
           NSLog(@"这句代码只会执行一次");
        });
    }
  • 相关阅读:
    利用Oracle创建数据库
    安装Oracle 10g
    安装ArcGIS Engine 9.3
    安装ArcGIS Desktop 9.3
    绘制扇形效果线条小Bug解决
    MFC画线功能总结
    MFC消息映射机制以及画线功能实现
    truncate
    postgresql死锁处理
    python编程中的if __name__ == 'main': 的作用
  • 原文地址:https://www.cnblogs.com/key1309/p/5216988.html
Copyright © 2011-2022 走看看