使用pthread创建子线程的简单步骤
  1. 导入头文件 #import <pthread.h>
  2. 指定新线程标识符
  3. 使用pthread创建线程的函数
  4. 根据result = 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 _Nullable * _Nonnull __restrict          传入到线程标识符的指针地址
  • const pthread_attr_t * _Nullable __restrict        线程属性:传入指向线程属性的指针地址
  • void * _Nullable (* _Nonnull)(void * _Nullable)    新线程要执行的函数(任务),传入函数地址即函数名
  • void * _Nullable __restrict:                       传入到函数的参数
  • 返回值为整型                                         0表示创建线程成功 否则创建线程失败
  • 参数3的进一步解释

void * _Nullable    (* _Nonnull)   (void * _Nullable)

 
     函数返回值类型            函数名          函数参数
 
上代码
 
 
 #import "ViewController.h"
#import <pthread.h> @interface ViewController ()
@property (weak, nonatomic) IBOutlet UIButton *pthreadCreateThreadBtn; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; }
#pragma mark - 创建线程的点击事件
- (IBAction)pthreadCreateThreadBtnClick:(id)sender { [self pthreadDemo];
[self pthreadDemo2]; } #pragma mark - pthread 创建子线程的代码实现
- (void)pthreadDemo{
//参数1: 新线程的标识符
pthread_t ID; //创建 指定标识符 指定参数为空 的线程
int result = pthread_create(&ID, NULL, demo, NULL);
if (result == ) {
NSLog(@"未传参数线程创建成功");
}else{
NSLog(@"未传参数线程创建失败");
} } #pragma mark - pthread 创建子线程的代码实现
- (void)pthreadDemo2{
// NSLog(@"pthreadDemo2 = %@",[NSThread currentThread]);
//参数1: 新线程的标识符
pthread_t id2;
NSString *ocStr = @"hello iOS"; //创建 指定标识符 指定参数 的线程
// Implicit conversion of Objective-C pointer type 'NSString *' to C pointer type 'void *' requires a bridged cast
int result = pthread_create(&id2, NULL, demo2, (__bridge void *)(ocStr));
if (result == ) {
NSLog(@"传了参数的线程创建成功");
}else{
NSLog(@"传了参数的线程创建失败");
} } #pragma mark - 创建的无参数新线程执行的函数
void *demo(void *param){
NSLog(@"用于创建无参数线程当前线程%@",[NSThread currentThread]);
return NULL;
} #pragma mark - 创建的有参数新线程执行的函数
void *demo2(void *param){
// Implicit conversion of Objective-C pointer type 'NSString *' to C pointer type 'void *' requires a bridged cast
NSString *str = (__bridge NSString *)(param); NSLog(@"用于创建的有参数%@的线程-当前线程%@",str,[NSThread currentThread]);
return NULL;
} @end

pthread创建线程的简单演示的更多相关文章

  1. 【转】用Pthread创建线程的一个简单Demo

    一.我们直接在COCOS2D-X自带的HelloWorld工程中添加代码.首先将Pthread的文件包含进来包括lib文件.在HelloWorld.cpp中引入头文件和库. #include &quo ...

  2. c++ Pthread创建线程后必须使用join或detach释放线程资源

    http://www.cppblog.com/prayer/archive/2012/04/23/172427.html 这两天在看Pthread 资料的时候,无意中看到这样一句话(man pthre ...

  3. Python_多线程1(创建线程,简单线程同步)

    threading 模块除了包含 _thread 模块中的所有方法外,还提供的其他方法: threading.currentThread(): 返回当前的线程变量. threading.enumera ...

  4. C# 创建线程的简单方式:异步委托 .

    定义一个委托调用的方法:TakesAWhile //定义委托要引用的方法 private static int TakesAWhile(int data, int ms) { Console.Writ ...

  5. 创建线程方式-pthread

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  6. Java多线程学习总结--线程概述及创建线程的方式(1)

    在Java开发中,多线程是很常用的,用得好的话,可以提高程序的性能. 首先先来看一下线程和进程的区别: 1,一个应用程序就是一个进程,一个进程中有一个或多个线程.一个进程至少要有一个主线程.线程可以看 ...

  7. Netty源码分析第2章(NioEventLoop)---->第1节: NioEventLoopGroup之创建线程执行器

    Netty源码分析第二章: NioEventLoop 概述: 通过上一章的学习, 我们了解了Server启动的大致流程, 有很多组件与模块并没有细讲, 从这个章开始, 我们开始详细剖析netty的各个 ...

  8. Python创建线程

    Python 提供了 _thread 和 threading 两个模块来支持多线程,其中 _thread 提供低级别的.原始的线程支持,以及一个简单的锁,正如它的名字所暗示的,一般编程不建议使用 th ...

  9. posix 线程(一):线程模型、pthread 系列函数 和 简单多线程服务器端程序

    posix 线程(一):线程模型.pthread 系列函数 和 简单多线程服务器端程序 一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属 ...

随机推荐

  1. 安装GPU版本的tensorflow填过的那些坑!---CUDA说再见!

    那些坑,那些说不出的痛! --------回首安装的过程,真的是填了一个坑又出现了一坑的感觉.记录下了算是自己的笔记也能给需要的人提供一点帮助. 1 写在前面的话 其实在装GPU版本的tensorfl ...

  2. 【hibernate 初探】之 关系映射,ORM

    从整理上讲,一个ORM框架(以hibernate为例)所涉及内容无非就是,如何映射,如何检索,还有事务处理.所以从这三方面入手,基本上可以保证将hibernate可以用到自己的项目之中.所以我先说一下 ...

  3. org.apache.jasper.JasperException: - Page directive must not have multiple occurrences of pageencoding

    最近写jsp遇到一系列的低级错误,记录下来权当前车之鉴吧. 错误提示: SEVERE: Servlet.service() for servlet jsp threw exceptionorg.apa ...

  4. JAVA金额按比例分摊,零头处理

    金额精确计算,必须使用BigDecimal; 平均分摊,分摊的零头,一般都是由数据"精度"和分摊系数决定的: 主要是如何对零头进行处理,保证尽可能的平均分配. 1.按户均摊 /** ...

  5. 关于TRIM的优化技巧

    背景 今天在论坛中,看到有人在问一个千万级别表查询的优化.一个简单的查询几分钟.语句如下 SELECT  work_date ,        major ,        style ,      ...

  6. 开始编写寄几的 CSS 基础库

    前言 在现在的互联网业务中,前端开发人员往往需要支持比较多的项目数量.很多公司只有 1-2 名前端开发人员,这其中还不乏规模比较大的公司.这时前端同学就需要独挡一面支持整个公司上下的前端业务,项目如流 ...

  7. eclipse连接hadoop问题

    1,首先可以测试:hafs dfsadmin -safemode leave2,如果出现下面的问题Error:Permission denied: user= ,access=READ_EXECUTE ...

  8. jar包的一生

    经常会头疼于一个jar包是如何制作的,包括maven的打包方式,springboot的打jar包的原理,jar包稍稍有错误就会完全无法运行.在网上折腾了很久终于有些思路和步骤,在这里做个笔记 本文大纲 ...

  9. phpstudy连接SQL Server 2008数据库 以及 php使用sql server出现乱码解决方式

    开始也尝试自己配置php安装环境,找到一个详细的百度经验http://jingyan.baidu.com/article/154b46315242b328ca8f4101.html,前面有问题也一一去 ...

  10. 【css】盒子模型 之 概述

    摘要 一些基本的概念以及常见使用问题 概述 BFC 是css 中布局的核心 - 盒模型,根据块级元素及行级元素可分为块级容器, 行级容器,但容器内部都遵循 BFC BFC 空间布局 备注: IE 的盒 ...