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

 想咨询的同窗能够加做者微信,

             

相关文章
相关标签/搜索