NSOperationQueue的其他方法
1.设置最大并发数
什么是并发数
- (NSInteger)maxConcurrentOperationCount;
- (void)setMaxConcurrentOperationCount:(NSInteger)cnt;
默认是并发队列,如果最大并发数>1,并发
如果最大并发数==1,串行队列
系统的默认是最大并发数-1
-(void)maxConcurrentOperationCount
{
//1.创建队列
NSOperationQueue *queue = [[NSOperationQueue alloc]init]; //maxConcurrentOperationCount
/*
默认是并发队列,如果最大并发数>1,并发
如果最大并发数==1,串行队列
系统的默认是最大并发数-1 */
queue.maxConcurrentOperationCount = ; //2.封装操作
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"1---%@",[NSThread currentThread]);
}]; NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"2---%@",[NSThread currentThread]);
}]; NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"3---%@",[NSThread currentThread]);
}]; NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"4---%@",[NSThread currentThread]);
}]; NSBlockOperation *op5 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"5---%@",[NSThread currentThread]);
}]; //3.把操作添加到队列
[queue addOperation:op1];
[queue addOperation:op2];
[queue addOperation:op3];
[queue addOperation:op4];
[queue addOperation:op5];
}
示例
2.队列的取消、暂停、恢复
取消队列的所有操作(取消队列中的所有线程,是不可恢复的)
- (void)cancelAllOperations;
提示:也可以调用NSOperation的- (void)cancel方法取消单个操作
- (void)setSuspended:(BOOL)b; // YES代表暂停队列,NO代表恢复队列
- (BOOL)isSuspended;
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
// suspended
// self.queue.suspended = YES;
//当值为YES的适合暂停,为NO的时候是恢复
// if (self.queue.suspended) {
// NSLog(@"恢复执行");
// self.queue.suspended = NO;
// }else
// {
// NSLog(@"暂停");
// self.queue.suspended = YES;
// } //取消,不再执行
[self.queue cancelAllOperations]; }
示例
3.补充:如何中断线程中的操作
队列的取消、暂停、恢复,是不能中断正在执行的操作的,只对出去等待调度队列中的线程有效.想要中断正在执行的线程,可以用以下方法:
用self.isCancelled判断外界是否执行了中断操作,然后在调用return方法.
@implementation YSOperation
-(void)main
{
//耗时操作
for (NSInteger i =; i<; i++) {
// if (self.isCancelled) {
// return;
// }
NSLog(@"1-%zd---%@",i,[NSThread currentThread]);
} if (self.isCancelled) {
return;
}
for (NSInteger i =; i<; i++) {
NSLog(@"2-%zd---%@",i,[NSThread currentThread]);
} if (self.isCancelled) {
return;
} for (NSInteger i =; i<; i++) {
NSLog(@"3-%zd---%@",i,[NSThread currentThread]);
}
}
@end
示例--在继承自NSOperation的类中中断线程
NSOperationQueue的其他方法的更多相关文章
- 多线程编程4 - NSOperationQueue
一.简介 一个NSOperation对象可以通过调用start方法来执行任务,默认是同步执行的.也可以将NSOperation添加到一个NSOperationQueue(操作队列)中去执行,而且是异步 ...
- NSOperationQueue
一.简介 一个NSOperation对象可以通过调用start方法来执行任务,默认是同步执行的.也可以将NSOperation添加到一个NSOperationQueue(操作队列)中去执行,而且是异步 ...
- 2016 - 1- 19 NSOperationQueue的简单使用
一:NSOperationQueue的作用: 1.NSOperation可以调用start方法来执行任务,但默认是同步执行. 2.如果将NSOperation加入到NSOperationQueue中, ...
- 多线程编程3 - NSOperationQueue
一.简介 一个NSOperation对象可以通过调用start方法来执行任务,默认是同步执行的.也可以将NSOperation添加到一个NSOperationQueue(操作队列)中去执行,而且是异步 ...
- IOS开发 多线程编程 - NSOperationQueue
一.简介 一个NSOperation对象可以通过调用start方法来执行任务,默认是同步执行的.也可以将NSOperation添加到一个NSOperationQueue(操作队列)中去执行,而且是异步 ...
- iOS 并发编程之 Operation Queues
现如今移动设备也早已经进入了多核心 CPU 时代,并且随着时间的推移,CPU 的核心数只会增加不会减少.而作为软件开发者,我们需要做的就是尽可能地提高应用的并发性,来充分利用这些多核心 CPU 的性能 ...
- iOS 并发编程指南
iOS Concurrency Programming Guide iOS 和 Mac OS 传统的并发编程模型是线程,不过线程模型伸缩性不强,而且编写正确的线程代码也不容易.Mac OS 和 iOS ...
- iOS - NSURLSession 网络请求
前言 NS_CLASS_AVAILABLE(NSURLSESSION_AVAILABLE, 7_0) @interface NSURLSession : NSObject @available(iOS ...
- iOS 并发:NSOperation 与调度队列入门(1)
一直以来,并发都被视为 iOS 开发中的「洪水猛兽」.许多开发者都将其视为危险地带,唯恐避之而不及.更有谣传认为,多线程代码应该尽力避免.笔者同意,如果你对并发的了解不够深入,就容易造成危险.但是,危 ...
随机推荐
- js多行省略
$(function (){ // var $introduce = $(".c-introduce").html(); // $new_introduce = $introduc ...
- 深入浅出Mybatis系列(十)---SQL执行流程分析(源码篇)
最近太忙了,一直没时间继续更新博客,今天忙里偷闲继续我的Mybatis学习之旅.在前九篇中,介绍了mybatis的配置以及使用, 那么本篇将走进mybatis的源码,分析mybatis 的执行流程, ...
- 删除Xcode中的 证书文件
Finder->前往 ~/Library/MobileDevice/Provisioning Profiles
- (SenchaTouch+PhoneGap)开发笔记(1)开发环境搭建一
1.下载senchaTouch 2.下载senchaCMD 3.安装ruby(for windows ) 4.senchaCmd创建项目: 打开senchacmd,cd到senchaTouch的目录如 ...
- asp.net ajax控件tab扩展,极品啊,秒杀其它插件
说明:asp.net ajax控件tab要设置width和height,而且在线文本编辑器放能够放入tab中,也必须是asp.net的控件型在线文本,例如fckeditor,下面是我设置好的配置. & ...
- php实现递归的三种方式: 遍历文件夹实例
递归函数是我们常用到的一类函数,最基本的特点是函数自身调用自身,但必须在调用自身前有条件判断,否则无限无限调用下去.实现递归函数可以采取什么方式呢?本文列出了三种基本方式.理解其原来需要一定的基础知识 ...
- Game02 最新版本2.0.0
Game02发布转站于此,欢迎大家下载.... 简介: Game02是由ImGenius开发的一款即时在线小游戏.玩法简单,易于上手,主要靠技术,不会出现不要脸的充值等内容. 操控方法:W和A左右移动 ...
- 前端工程师IE6兼容性问题随笔(未完待续)
1 height.在IE6下元素高度小于19px的时候,会被当做19px来处理.解决办法:用overflow:hidden;来处理.box{height:2px;background:red;over ...
- 用java程序调用批处理文件
用java程序执行批处理文件并打印出控制台信息: public class test { public static void main(String[] args) { try { //执行批处理文 ...
- gitt
一,git config core.autocrlf false 二,vi .git/config[remote "origin"] url = https://github.co ...