swift使用pthread

//
//  ViewController.swift
//  多线程
//
//  Created by admin on 16/2/17.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        // 在当前线程中执行循环,在循环结束之前,界面会卡住
//        self.long()
        // 在子进程中执行循环,界面不会卡住
//        self.performSelectorInBackground("long", withObject: nil)
        self.start()
    }

    func start()
    {
        // 初始化需要的属性
        var pthread = pthread_t()
        var pthreadAttr = pthread_attr_t()
        var returnValue = pthread_attr_init(&pthreadAttr)
        returnValue = pthread_attr_set_qos_class_np(&pthreadAttr, QOS_CLASS_USER_INTERACTIVE, 0)
        // 线程执行的函数
        func run(x:UnsafeMutablePointer<Void>)->UnsafeMutablePointer<Void>
        {
            for(var i = 1;i < 10000;i++)
            {
                // 打印当前线程  <NSThread: 0x7fd6ab50f480>{number = 2, name = (null)}
                print(NSThread.currentThread())
                print(i)
            }
            return nil
        }
        // 闭包
//        pthread_create(&pthread, &pthreadAttr, { (x:UnsafeMutablePointer<Void>) in
//            for(var i = 1;i < 10000;i++)
//            {
//                // 打印当前线程  <NSThread: 0x7fd6ab50f480>{number = 2, name = (null)}
//                print(NSThread.currentThread())
//                print(i)
//            }
//            return nil
//        }, nil)
        /**
        (要开的线程变量,线程的属性,线程执行的函数,需要传递的参数)
        */
        // pthread_create(<#T##UnsafeMutablePointer<pthread_t>#>, <#T##UnsafePointer<pthread_attr_t>#>, <#T##((UnsafeMutablePointer<Void>) -> UnsafeMutablePointer<Void>)!##((UnsafeMutablePointer<Void>) -> UnsafeMutablePointer<Void>)!##(UnsafeMutablePointer<Void>) -> UnsafeMutablePointer<Void>#>, <#T##UnsafeMutablePointer<Void>#>)

        // 函数,用self.run就报错。。。。
        pthread_create(&pthread, &pthreadAttr, run, nil)
    }

    func run(x:UnsafeMutablePointer<Void>)->UnsafeMutablePointer<Void>
    {
        for(var i = 1;i < 10000;i++)
        {
            // 打印当前线程  <NSThread: 0x7fd6ab50f480>{number = 2, name = (null)}
            print(NSThread.currentThread())
            print(i)
        }
        return nil
    }
    func long()
    {
        for(var i = 1;i < 100000;i++)
        {
            // 打印当前线程  <NSThread: 0x7fd6ab50f480>{number = 2, name = (null)}
            print(NSThread.currentThread())
            print(i)
        }
    }
}

标签: iOS多线程, pthread

添加新评论