iOS-多线程(二)Pthread了解与简单使用
2019-07-07 本文已影响0人
厦门_小灰灰
Pthread介绍与简单使用
介绍
来自百度百科
POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。Windows操作系统也有其移植版pthreads-win32。
简单使用
- 导入头文件:
#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);
其中
- 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
打印结果:
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对象:
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!