iOS-多線程(二)Pthread瞭解與簡單使用

Pthread介紹與簡單使用

介紹

來自百度百科
POSIX線程(POSIX threads),簡稱Pthreads,是線程的POSIX標準。該標準定義了建立和操縱線程的一整套API。在類Unix操做系統(Unix、Linux、Mac OS X等)中,都使用Pthreads做爲操做系統的線程。Windows操做系統也有其移植版pthreads-win32。java

簡單使用
  1. 導入頭文件:
#import <pthread.h>複製代碼
  1. 建立線程
/** 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);複製代碼

其中微信

  • pthread_t:線程ID;
  • pthread_attr_t:線程屬性;

簡單實例:函數

#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,我會在後續的文章中講到,到時候將文章地址貼與此。操作系統

補充知識點
  1. idvoid *的區別:
    id:指向任意一個Objective-C類的對象指針,Objective-C類,Objective-C類,Objective-C類;
    void *:指向任何其餘數據類型的指針;線程

  2. C和OC之間傳遞數據的時候,須要橋接(__bridge),橋接是告訴編譯器如何管理內存;指針

over!rest



做者:廈門_小灰灰
連接:https://www.jianshu.com/p/88f0dc23ed39
 

此文章來源與第三方轉載code

 想諮詢的同窗能夠加做者微信,

             

相關文章
相關標籤/搜索