//
// 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)
}
}
}