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(), ^{

                 

            });

     

  • 相关阅读:
    python类的特殊成员和方法
    python 之 staticmethod,classmethod,property的区别
    启动Android模拟器问题集锦
    eclipse编译Jmeter源码
    解决 'chromedriver' executable needs to be in PATH.'报错
    登录程序优化
    通过标志位跳出多层循环
    crontab计划任务监控nginx服务器
    httpstatus类的状态有哪些
    python正则表达式
  • 原文地址:https://www.cnblogs.com/yangli-ios/p/4193558.html
Copyright © 2011-2022 走看看