來自百度百科
POSIX線程(POSIX threads),簡稱Pthreads,是線程的POSIX標準。該標準定義了建立和操縱線程的一整套API。在類Unix操做系統(Unix、Linux、Mac OS X等)中,都使用Pthreads做爲操做系統的線程。Windows操做系統也有其移植版pthreads-win32。java
#import <pthread.h>複製代碼
/** pthread 建立線程 參數含義: 1.指向線程標識符的指針; 2.設置線程屬性; 3.線程運行函數的起始地址(函數指針); 4.運行函數的參數; 返回值: 若線程建立成功,則返回0。若線程建立失敗,則返回出錯編號; */
int pthread_create(pthread_t _Nullable * _Nonnull __restrict, const pthread_attr_t * _Nullable __restrict, void * _Nullable (* _Nonnull)(void * _Nullable), void * _Nullable __restrict);複製代碼
其中微信
簡單實例:函數
#import "ViewController.h"
#import <pthread.h>
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//聲明一個pthread
pthread_t pthreadId = NULL;
//number爲要傳入執行函數的參數值
int number = 10;
//建立線程
int result = pthread_create(&pthreadId,
NULL,
run,
&number);
//根據結果,作相關操做
if ( result == 0 ) {
NSLog(@"線程建立成功");
} else {
NSLog(@"線程建立失敗:%d", result);
}
}
void *run(void *args)
{
int number = (int)(*((int *)args));
NSLog(@"%@,number=%d", [NSThread currentThread], number);
return NULL;
}
@end
複製代碼
打印結果:ui
2019-07-07 17:08:14.591579+0800 NSThreadDemo[1817:45496] 線程建立成功
2019-07-07 17:08:14.591740+0800 NSThreadDemo[1817:45553] <NSThread: 0x60000211a700>{number = 3, name = (null)},number=10複製代碼
關於上面執行函數的參數,能夠傳入OC對象,不過要作相應類型的轉換,好比傳NSString對象:spa
NSString *string = @"hui";
int result = pthread_create(&pthreadId,
NULL,
run,
(__bridge void *)(string));
執行函數:
void *run(void *args) {
NSString *string = (__bridge NSString *)args;
NSLog(@"%@,string=%@", [NSThread currentThread], string);
return NULL;
}複製代碼
關於__bridge,我會在後續的文章中講到,到時候將文章地址貼與此。操作系統
id與void *的區別:
id:指向任意一個Objective-C類的對象指針,Objective-C類,Objective-C類,Objective-C類;
void *:指向任何其餘數據類型的指針;線程
C和OC之間傳遞數據的時候,須要橋接(__bridge),橋接是告訴編譯器如何管理內存;指針
over!rest
此文章來源與第三方轉載code
想諮詢的同窗能夠加做者微信,