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

                 

            });

     

  • 相关阅读:
    CentOS 上配置 lua 的服务器环境(enet)
    报错解决 unable to unroll loop, loop does not appear to terminate in a timely manner (994 iterations) or unrolled loop is too large, use the [unroll(n)] attribute to force an exact higher number
    开源许可证的选择
    Lua 协程
    [命令模式]在游戏开发中的应用
    NGUI 源码分析- AnchorPoint
    NGUI 源码分析- UIWidgetInspector
    Java程序员需要学习的知识点
    Linux下安装Perl和Perl的DBI模块
    Linux安装JDK
  • 原文地址:https://www.cnblogs.com/yangli-ios/p/4193558.html
Copyright © 2011-2022 走看看