加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

[Swift 开发] GCD常用方法

发布时间:2020-12-14 06:05:34 所属栏目:百科 来源:网络整理
导读:GCD常用的用法 子线程 DispatchQueue.global().async { print("开一条全局队列异步执行任务") } 主线程 DispatchQueue.main.async { print("在主队列执行任务") } wait var myQueue = DispatchQueue(label: "第一条线程")var myQueue2 = DispatchQueue(label

GCD常用的用法

子线程

DispatchQueue.global().async {  
         print("开一条全局队列异步执行任务")   
     }  

主线程
DispatchQueue.main.async {  
       print("在主队列执行任务")  
 }  
   


wait

var myQueue = DispatchQueue(label: "第一条线程")
var myQueue2 = DispatchQueue(label: "第二条线程")
let group = DispatchGroup()

myQueue.async(group: group,qos: .default,flags: []) {
    for _ in 0...10 {

        print("耗时任务一")
    }
}

myQueue.async(group: group,flags: []) {
    for _ in 0...10 {

        print("耗时任务二")
        sleep(UInt32(3))
    }
}
//等待上面任务执行,会阻塞当前线程,超时就执行下面的,上面的继续执行。可以无限等待 .distantFuture
let result = group.wait(timeout: .now() + 2.0) 
switch result {
case .success:
    print("不超时,上面的两个任务都执行完")
case .timedOut:
    print("超时了,上面的任务还没执行完执行这了")
}

print("接下来的操作")

notify
let group = DispatchGroup()  
     myQueue?.async(group: group,flags: [],execute: {   
         for _ in 0...10 {  
  
         print("耗时任务一")  
         }  
     })  
     myQueue?.async(group: group,execute: {  
         for _ in 0...10 {  
  
             print("耗时任务二")  
         }  
     })  
     //执行完上面的两个耗时操作,回到myQueue队列中执行下一步的任务  
     group.notify(queue: myQueue!) {  
         print("回到该队列中执行")  
     }  

barrier

myQueue?.async {//任务一  
            for _ in 0...10 {  
                print("......")  
            }  
        }  
        myQueue?.async {//任务二  
            for _ in 0...10 {  
                print("++++++");  
            }  
        }  
  
        // barrier 会等待上面执行完毕再执行下面的,会阻塞当前线程  
        //        myQueue?.async(flags:.barrier,execute: {//1.  
        //            print("000000")  
        //        })  
  
        myQueue?.async(group: nil,flags: .barrier,execute: {//2.  
            print("000000")  
        })  
  
        myQueue?.async {  
            print("222221")  
        }  

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读