zoukankan      html  css  js  c++  java
  • 多线程GCD的使用

    dispatch_async(dispatch_get_global_queue(0, 0), ^{ 
    // 处理耗时操作的代码块... 
    
    //通知主线程刷新 
    dispatch_async(dispatch_get_main_queue(), ^{ 
    //回调或者说是通知主线程刷新, 
    }); 
    
    });

    dispatch_async开启一个异步操作,第一个参数是指定一个gcd队列,第二个参数是分配一个处理事物的程序块到该队列。 
    dispatch_get_global_queue(0, 0),指用了全局队列。 
    一般来说系统本身会有3个队列。 
    global_queue,current_queue,以及main_queue. 
    获取一个全局队列是接受两个参数,第一个是我分配的事物处理程序块队列优先级。分高低和默认,0为默认2为高,-2为低 

    #define DISPATCH_QUEUE_PRIORITY_HIGH     2  
    #define DISPATCH_QUEUE_PRIORITY_DEFAULT  0  
    #define DISPATCH_QUEUE_PRIORITY_LOW     (-2)

    GCD异步并行下载

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
    dispatch_group_t group = dispatch_group_create(); 
    dispatch_group_async(group, queue, ^{ 
    [NSThread sleepForTimeInterval:1]; 
    NSLog(@"group1"); 
    }); 
    dispatch_group_async(group, queue, ^{ 
    [NSThread sleepForTimeInterval:2]; 
    NSLog(@"group2"); 
    }); 
    dispatch_group_async(group, queue, ^{ 
    [NSThread sleepForTimeInterval:3]; 
    NSLog(@"group3"); 
    }); 
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{ 
    NSLog(@"updateUi"); 
    }); 
    dispatch_release(group); 

    dispatch_group_async可以实现监听一组任务是否完成,完成后得到通知执行其他的操作。这个方法很有用,比如你执行三个下载任务,当三个任务都下载完成后你才通知界面说完成的了

    打印:

    [43328:11303] group1
    [43328:12a1b] group2
    [43328:13003] group3
    [43328:f803] updateUi

    dispatch_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行

    dispatch_queue_t queue = dispatch_queue_create("**test.rongfzh.yc", DISPATCH_QUEUE_CONCURRENT); 
    dispatch_async(queue, ^{ 
    [NSThread sleepForTimeInterval:2]; 
    NSLog(@"dispatch_async1"); 
    }); 
    dispatch_async(queue, ^{ 
    [NSThread sleepForTimeInterval:4]; 
    NSLog(@"dispatch_async2"); 
    }); 
    dispatch_barrier_async(queue, ^{ 
    NSLog(@"dispatch_barrier_async"); 
    [NSThread sleepForTimeInterval:4]; 
    }); 
    dispatch_async(queue, ^{ 
    [NSThread sleepForTimeInterval:1]; 
    NSLog(@"dispatch_async3"); 
    });
  • 相关阅读:
    BibTex (.bib) 文件的凝视
    SQL注入原理解说,非常不错!
    怎样将文件隐藏在图片中
    白话经典算法系列之五 归并排序的实现
    帮你理解多线程
    很好的理解遗传算法的样例
    薏米红豆粥功效及做法介绍
    Linux makefile 教程 很具体,且易懂
    站点权重对于站点的重要性
    Codeforces Round #250 (Div. 2)——The Child and Set
  • 原文地址:https://www.cnblogs.com/csdnIOS/p/4807872.html
Copyright © 2011-2022 走看看