zoukankan      html  css  js  c++  java
  • Swift GCD

      var queue: dispatch_queue_t = dispatch_get_main_queue()// 主线程

            queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)// 后台执行

            

            // 异步执行队列任务

            dispatch_async(queue, { () -> Void in

                print("开新线程执行")

            })

            

            

            // 延时执行

            var delta:Int64 = Int64(2 * NSEC_PER_SEC)// 2s后执行,可能不仅限于2s

            delta = Int64(100 * NSEC_PER_MSEC)//100毫秒后执行

            // NSEC_PER_MSEC

            let when: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, delta)

            dispatch_after(when, queue) { () -> Void in

                print("dispatch_after")

            }

            

            

            // 只执行一次

            struct Static {

                static var onceToken: dispatch_once_t = 0

                static var value: String!

            }

            dispatch_once(&Static.onceToken, { () -> Void in

                Static.value = "单例模式"

            })

            print("(Static.value)")

            dispatch_once(&Static.onceToken, { () -> Void in

                Static.value = "改变值"

            })

            print("(Static.value)")

            

            

            // 分组执行

            let group = dispatch_group_create()

            queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)// 默认优先级执行

            for (var i = 0; i<10; i++) {

                //异步执行队列任务

                dispatch_group_async(group, queue, { () -> Void in

                    Static.value = Static.value + "1"

                    print("(Static.value)")

                })

            }

            // 分组队列执行完毕后执行

            dispatch_group_notify(group, queue) { () -> Void in

                print("dispatch_group_notify")

            }

            

            

            // 串行队列:只有一个线程,加入到队列中的操作按添加顺序依次执行。

            let serialQueue = dispatch_queue_create("yangj", DISPATCH_QUEUE_SERIAL)

            for (var i = 0; i<10; i++) {

                //异步执行队列任务

                dispatch_async(serialQueue, { () -> Void in

                    //Static.value = Static.value + "1"

                    //println("(Static.value)")

                })

            }

            

            

            // 并发队列:有多个线程,操作进来之后它会将这些队列安排在可用的处理器上,同时保证先进来的任务优先处理。

            let globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)

            for (var i = 0; i<10; i++) {

                //异步执行队列任务

                dispatch_async(globalQueue, { () -> Void in

                    //Static.value = Static.value + "1"

                    //println("(Static.value)")

                })

            }

            

        }

  • 相关阅读:
    js保存图片至本地
    ArrayLike
    key的作用
    react Video event
    react中字符串换行
    react打包后找不到静态文件
    2020软件工程第三次作业
    003 Longest Substring Without Repeating Characters
    002addTwoNumbers
    001twoSum
  • 原文地址:https://www.cnblogs.com/ZGSmile/p/5694241.html
Copyright © 2011-2022 走看看