zoukankan      html  css  js  c++  java
  • ios多线程开发 GCD常见用法

    1-延迟执行

     可以安排其线程(1),主队列

             dispatch_queue_t queue= dispatch_get_main_queue();

             dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), queue, ^{

                NSLog(@"主队列--延迟执行------%@",[NSThread currentThread]);

           });     

     可以安排其线程(2),并发队列

         1.获取全局并发队列

           dispatch_queue_t queue1= dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

         2.计算任务执行的时间

           dispatch_time_t when=dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC));

         3.会在when这个时间点,执行queue中的这个任务

           dispatch_after(when, queue1, ^{

             NSLog(@"并发队列-延迟执行------%@",[NSThread currentThread]);

           });

     

    2.使用dispatch_once一次性代码

        使用dispatch_once函数能保证某段代码在程序运行过程中只被执行1

        static dispatch_once_t onceToken;

        dispatch_once(&onceToken, ^{

            // 只执行1次的代码(这里面默认是线程安全的)

        });

    整个程序运行过程中,只会执行一次。

     

    3.队列组

    使用队列组可以让任务1和任务2同时进行,且当两个任务都完成的时候回到主线程进行界面显示操作。

    //1.创建一个队列组

            dispatch_group_t group = dispatch_group_create();

     

    //2.开启一个任务

            dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{  

            });

        

    //3.开启第二个任务

            dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{  

            });

    //同时执行任务1任务2操作

     

    //4.group中的所有任务都执行完毕, 再回到主线程执行其他操作

            dispatch_group_notify(group,dispatch_get_main_queue(), ^{

                 

            });

     

  • 相关阅读:
    一个涉及到浮点寄存器的CM
    树和二叉树一篇就搞定!
    串的两种模式匹配方式(BF/KMP算法)
    队列的知识讲解与基本实现(数据结构)
    如何用C++实现栈
    判断List集合为空还是null的正确打开方式
    双链表的基本实现与讲解(C++描述)
    Redis从认识安装到实现增删改查
    如何使用C++实现单链表
    线性表——顺序表的实现与讲解(C++描述)
  • 原文地址:https://www.cnblogs.com/yangli-ios/p/4193558.html
Copyright © 2011-2022 走看看