pthread基礎
pthread是POSIX thread的簡寫,一套通用的多線程API,適用於Unix、Linux、Windows等系統,跨平台、可移植,使用難度大,C語言框架,線程生命周期由程序員管理,百度百科上有詳細的介紹,去查看,由於iOS開發幾乎用不到,以下就簡單運用pthread開啟一個子線程,用來處理耗時操作
pthread創建子線程步驟
1.導入頭文件
#import <pthread.h>
2.pthread創建子線程
- (void)viewDidLoad { [super viewDidLoad]; /** 說明: 1.在c語言中,沒有對象的概念,對象類型是以-t/Ref結尾的; 2.c語言中的void * 和OC的id是等價的; 3.在混合開發時,如果在 C 和 OC 之間傳遞數據,需要使用 __bridge 進行橋接,橋接的目的就是為了告訴編譯器如何管理內存,MRC 中不需要使用橋接; 4.在 OC 中,如果是 ARC 開發,編譯器會在編譯時,根據代碼結構, 自動添加 retain/release/autorelease。但是,ARC 只負責管理 OC 部分的內存管理,而不負責 C 語言 代碼的內存管理。因此,開發過程中,如果使用的 C 語言框架出現retain/create/copy/new 等字樣的函數,大多都需要 release,否則會出現內存泄漏 */ //1.創建線程對象 pthread_t thread; //2.創建線程 NSString *param = @"參數"; int result = pthread_create(&thread, NULL, task, (__bridge void *)(param)); result == 0?NSLog(@"success"):NSLog(@"failure"); //3.設置子線程的狀態設置為detached,則該線程運行結束后會自動釋放所有資源,或者在子線程中添加 pthread_detach(pthread_self()),其中pthread_self()是獲得線程自身的id
pthread_detach(thread); /** pthread_create(<#pthread_t _Nullable *restrict _Nonnull#>, <#const pthread_attr_t *restrict _Nullable#>, <#void * _Nullable (* _Nonnull)(void * _Nullable)#>, <#void *restrict _Nullable#>) 參數: 1.指向線程標識符的指針,C 語言中類型的結尾通常 _t/Ref,而且不需要使用 *; 2.用來設置線程屬性; 3.指向函數的指針,傳入函數名(函數的地址),線程要執行的函數/任務; 4.運行函數的參數; */ } /** void * (*) (void *) 返回值 函數名 函數參數 */ void *task(void * param){ //在此做耗時操作 NSLog(@"new thread : %@ 參數是: %@",[NSThread currentThread],(__bridge NSString *)(param)); return NULL; }
其他相關函數
pthread_t:線程ID
pthread_attr_t:線程屬性
pthread_create():創建一個線程
pthread_exit():終止當前線程
pthread_cancel():中斷另外一個線程的運行
pthread_join():阻塞當前的線程,直到另外一個線程運行結束
pthread_attr_init():初始化線程的屬性
pthread_attr_setdetachstate():設置脫離狀態的屬性(決定這個線程在終止時是否可以被結合)
pthread_attr_getdetachstate():獲取脫離狀態的屬性
pthread_attr_destroy():刪除線程的屬性
pthread_kill():向線程發送一個信號