iOS开发多线程篇—线程的状态

iOS开发多线程篇—线程的状态

一、简单介绍

线程的创建:

 self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];

说明:创建线程有多种方式,这里不做过多的介绍。

 

线程的开启:

[self.thread start];

线程的运行和阻塞:

(1)设置线程阻塞1,阻塞2秒

    [NSThread sleepForTimeInterval:2.0];

   

(2)第二种设置线程阻塞2,以当前时间为基准阻塞4秒

    NSDate *date=[NSDate dateWithTimeIntervalSinceNow:4.0];

    [NSThread sleepUntilDate:date];

线程处理阻塞状态时在内存中的表现情况:(线程被移出可调度线程池,此时不可调度)

线程的死亡:

当线程的任务结束,发生异常,或者是强制退出这三种情况会导致线程的死亡。

线程死亡后,线程对象从内存中移除。

二、代码示例

代码示例1:

复制代码
 1 //2 //  YYViewController.m3 //  04-NSThread02-线程的状态4 //5 //  Created by apple on 14-6-23.6 //  Copyright (c) 2014年 itcase. All rights reserved.7 //8 9 #import "YYViewController.h"
10 
11 @interface YYViewController ()
12 @property(nonatomic,strong)NSThread *thread;
13 
14 @end
15 
16 @implementation YYViewController
17 
18 - (void)viewDidLoad
19 {
20     [super viewDidLoad];
21     
22     //创建线程
23     self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];
24     //设置线程的名称
25     [self.thread setName:@"线程A"];
26 }
27 //当手指按下的时候,开启线程
28 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
29 {
30     //开启线程
31     [self.thread start];
32 }
33 
34 -(void)test
35 {
36     //获取线程
37     NSThread *current=[NSThread currentThread];
38     NSLog(@"test---打印线程---%@",self.thread.name);
39     NSLog(@"test---线程开始---%@",current.name);
40     
41     //设置线程阻塞1,阻塞2秒
42     NSLog(@"接下来,线程阻塞2秒");
43     [NSThread sleepForTimeInterval:2.0];
44    
45     //第二种设置线程阻塞2,以当前时间为基准阻塞4秒
46      NSLog(@"接下来,线程阻塞4秒");
47     NSDate *date=[NSDate dateWithTimeIntervalSinceNow:4.0];
48     [NSThread sleepUntilDate:date];
49     for (int i=0; i<20; i++) {
50         NSLog(@"线程--%d--%@",i,current.name);
51         
52     }
53         NSLog(@"test---线程结束---%@",current.name);
54 }
55 
56 @end
复制代码

打印查看:

代码示例2(退出线程):

复制代码
 1 //2 //  YYViewController.m3 //  04-NSThread02-线程的状态4 //5 //  Created by apple on 14-6-23.6 //  Copyright (c) 2014年 itcase. All rights reserved.7 //8 9 #import "YYViewController.h"
10 
11 @interface YYViewController ()
12 @property(nonatomic,strong)NSThread *thread;
13 
14 @end
15 
16 @implementation YYViewController
17 
18 - (void)viewDidLoad
19 {
20     [super viewDidLoad];
21     
22     //创建线程
23     self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];
24     //设置线程的名称
25     [self.thread setName:@"线程A"];
26 }
27 //当手指按下的时候,开启线程
28 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
29 {
30     //开启线程
31     [self.thread start];
32 }
33 
34 -(void)test
35 {
36     //获取线程
37     NSThread *current=[NSThread currentThread];
38     NSLog(@"test---打印线程---%@",self.thread.name);
39     NSLog(@"test---线程开始---%@",current.name);
40     
41     //设置线程阻塞1,阻塞2秒
42     NSLog(@"接下来,线程阻塞2秒");
43     [NSThread sleepForTimeInterval:2.0];
44    
45     //第二种设置线程阻塞2,以当前时间为基准阻塞4秒
46      NSLog(@"接下来,线程阻塞4秒");
47     NSDate *date=[NSDate dateWithTimeIntervalSinceNow:4.0];
48     [NSThread sleepUntilDate:date];
49     for (int i=0; i<20; i++) {
50         NSLog(@"线程--%d--%@",i,current.name);
51         if (5==i) {
52             //结束线程
53             [NSThread exit];
54         }
55 
56     }
57         NSLog(@"test---线程结束---%@",current.name);
58 }
59 
60 @end
复制代码

打印示例:

注意:人死不能复生,线程死了也不能复生(重新开启),如果在线程死亡之后,再次点击屏幕尝试重新开启线程,则程序会挂。

 

转载于:https://www.cnblogs.com/sunflower-lhb/p/4914893.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt 编写应用程序升级的配置文件json 生成工具

通过此工具将需要更新的应用程序和相关目录下的依赖文件配置成json格式的升级文件&#xff0c;客户端版本监控软件通过读取此json文件&#xff0c;对比相应字段&#xff0c;实现自动拉取文件&#xff0c;从而保证客户端应用程序自动更新。 此json文件放在待升级的exe同级目录下…

以太网供电新标准POE+,IEEE802.3at解析

以太网供电新标准POE&#xff0c;IEEE802.3at解析 以太网供电新标准POE&#xff0c;IEEE802.3at一、IEEE 802.3at标准出现的背景为了遵循IEEE 802.3af规范&#xff0c;受电设备(PD)上的PoE功耗被限制为12.95W&#xff0c;这对于传统的IP电话以及网络摄像头而言足以满足需求&am…

C# 6.0 (C# vNext) 的新功能:Expression Bodied Functions and Properties

Expression Bodied Function 它可以用在&#xff1a;methodsuser-defined operatorstype conversionsread-only properties indexers 看下面的样例&#xff1a;public class RgbColor(int r, int g, int b) {public int Red { get; } r;public int Green { get; } g;public i…

[react] 在React中如何避免不必要的render?

[react] 在React中如何避免不必要的render&#xff1f; shouldComponentUpdate、memoization、PureComponent 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

C++的JSON库及使用方法

From: http://blog.csdn.net/moruite/article/details/7310976 VC没有自带的JSON库&#xff0c;所以分享一下如何使用该库http://download.csdn.net/detail/moruite/4104704 1. json.h头文件包含了如下API [cpp] view plaincopy #ifndef CPPTL_JSON_H_INCLUDED # define CP…

流程制造项目中关于销售订单数量与实际产生数量不同时的解决方案

流程制造项目中关于销售订单数量与实际产生数量不同时的解决方案 在流程制造项目中&#xff0c;例如涂料领域&#xff0c;往往实际生产出来的数量与销售订单的数量会产生差异&#xff0c;这种差异是小额值的。 例如客户A下了100KG的涂料&#xff0c;但车间实际生产出来的数量会…

KEIL ARM 6.12 compiler 编译__ASM 错误的解决方法

1、问题 KEIL compiler 设置为 “use default compiler version 5” 可以正确编译以下汇编和C混合代码&#xff0c;更改编译器为V6.12后不识别__ASM关键字&#xff0c;并对汇编语法报错。 替换为 __ASM void MSR_MSP(uint32_t addr) {MSR MSP, r0 BX r14 } 2、解决办法 6.12…

GCD牛逼的中枢调度器

GCD的基本使用: - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {// dispatch_sync : 同步&#xff0c;不具备开启线程的能力// dispatch_async : 异步&#xff0c;具备开启线程的能力// 并发队列 &#xff1a;多个任务可以同时执行// 串行队列 &#xff1…

[react] 在React中组件的props改变时更新组件的有哪些方法?

[react] 在React中组件的props改变时更新组件的有哪些方法&#xff1f; 新版用 getDerivedstatefromProps(nextProps){ 业务逻辑} 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起…

平庸错了吗?

平庸&#xff0c;百度百科里的释义是&#xff1a;平凡、普通、寻常而不突出&#xff0c;没有作为。就像我&#xff0c;一直认为自已是个很平庸的人&#xff0c;平凡&#xff0c;很普通。没有优秀杰出的才能&#xff0c;没有高深莫测的思想&#xff0c;甚至没有多少可以用来奢侈…

QT 多屏参数获取和设置

1、获取屏幕参数 QList<QScreen *> screen_list QGuiApplication::screens();for(int i0;i<screen_list.count();i){qDebug()<<screen_list.at(i)->size(); //屏幕的像素分辨率qDebug()<<screen_list.at(i)->availableGeometry();//屏幕…

JIURL文档-Linux的虚拟内存与分页机制(x86-64位)(一)

作者&#xff1a;JIURL日期&#xff1a;2015年10月30日分页机制Linux&#xff08;x64CPU&#xff09;使用基于分页机制的虚拟内存。每个进程有256TB&#xff08;48位&#xff09;的虚拟地址空间。基于分页机制&#xff0c;这256TB地址空间的一些部分 被映射了物理内存&#xff…

[react] React怎样跳过重新渲染?

[react] React怎样跳过重新渲染&#xff1f; 生命周期 shouldComponentUpdate return false &#xff1f; 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

C++之deque

From: http://blog.csdn.net/zxjzxj521/article/details/8172953 1 什么是STL STL就是C Standard Template Library&#xff0c;也就是标准模版库&#xff0c;是一个高效的C程序库。STL包含六大组件&#xff1a;容器&#xff08;container&#xff09;、算法&#xff08;algor…

STM32 设置片外SRAM分散加载

STM32F407 通过FSMC外挂一片SRAM 容量1MB&#xff0c; 设置应用程序的中的超大数组存放在外部SRAM。 &#xff08;1&#xff09;首先通过设置FSMC&#xff0c;保证正确挂接SRAM。 &#xff08;2&#xff09;MDK设置 &#xff08;3&#xff09;应用程序用__attribute__指定需要…

.NET4.0 之 Dynamic VS Refle“.NET研究”ction 效率

在我先前的文章中&#xff0c;不断的推广.NET4.0新特性。特别是.NET4.0 Dynamic 这个新特性。随之而来的问题也出现了—Dynamic 执行效率如何&#xff1f; 我们做开发的不光需要代码简洁&#xff0c;能够希望自己能够写出好的架构。还有一点非常重要的就是&#xff0c;我们的写…

[react] 经常用React,你知道React的核心思想是什么吗?

[react] 经常用React&#xff0c;你知道React的核心思想是什么吗&#xff1f; 一切皆组件 数据驱动视图 单向数据流 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

高性能I/O设计模式

http://blog.csdn.net/chexlong/article/details/22417079转载于:https://www.cnblogs.com/fight-tao/p/4925705.html

回调函数总结(个人见解)

回调函数总结(个人见解):1. 回调函数的实现 > 被调用者写2. 写库的人 > 调用回调函数的人 > 调用者2.1 调用者: 1) 不关心谁是被调用者2) 只关心回调函数的原型及返回值3) 声明回调函数的接口&#xff0c;回调函数的实现交给被调用者去处理2.2 被…

lwip+freeRTOS 无法ping通的解决方案

0、工程环境 STM32F407ZGT6LAN8720FreeRTOSlwIP 1、硬件 &#xff08;1&#xff09;确认PHY芯片RMII管脚是否配置正确&#xff1b; &#xff08;2&#xff09;PHY芯片初始化完成后&#xff0c;用HAL_ETH_ReadPHYRegister读一下寄存器0&#xff0c;1&#xff0c;2&#xff0c…