使用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. java的多线程初体验

    这里以车站售票作为模拟场景,多个票务人员同时出售某一列高铁(G250?)的车票,售票的基本保证有2点: 1.不能售出多于预定限额的车票. 2.不能售出具有相同座位的车票. 初学java,有不当的地方各 ...

  2. readSerializableObj

    package JBJADV003;import java.io.*;public class readSerializableObj { public static void main(String ...

  3. Java 容器在实际项目开发中应用

    前言:在java开发中我们离不开集合数组等,在java中有个专有名词:"容器" ,下面会结合Thinking in Java的知识和实际开发中业务场景讲述一下容器在Web项目中的用 ...

  4. Jenkins设置Master/Slave

    说明:通过master/slave模式,可以在master节点上统一管理其他slave节点. 下面说明一步步实现master/slave模式. 第一步:以管理员登录jenkins.点击"系统 ...

  5. 使用JS开发桌面端应用程序NW.js-3-开发问题小记

    前言 因为我们的项目是2C的,而XP系统是最大的用户量占比,所以只能使用nw开发而不能用Electron,本文谨记开发nw过程中遇到的各种问题以及解决方案. nw.Window.open打开新窗口不能 ...

  6. 网络爬虫——针对任意主题批量爬取PDF

    |本文为博主原创,转载请说明出处 任务需求:要求通过Google针对任意关键字爬取大量PDF文档,如K-means,KNN,SVM等. 环境:Anaconda3--Windows7-64位--Pyth ...

  7. POJ 2296 Map Labeler / ZOJ 2493 Map Labeler / HIT 2369 Map Labeler / UVAlive 2973 Map Labeler(2-sat 二分)

    POJ 2296 Map Labeler / ZOJ 2493 Map Labeler / HIT 2369 Map Labeler / UVAlive 2973 Map Labeler(2-sat ...

  8. Android Studio2.1 Run APP:Error: Execution failed for task

    Android Studio2.1 Run APP时,遇到错误 Error: Execution failed for task ':app:clean'. Unable to delete file ...

  9. 玩玩微信公众号Java版之准备

    微信自2013年流行起来,现在的发展已经超过了我们的想象,那么对应的公众平台,小程序等都是让人眼前一亮的东西,这里来学习一下微信工作号的对接,实现为Java,希望大家一起学习!   这里大概描述一下所 ...

  10. 【chrome】 chrome 开发者工具

    1. 常用控制台工具 console.log  console.info  console.error  console.warn console.assert console.count conso ...