美文网首页
GCD取消还未执行的线程有两种方式

GCD取消还未执行的线程有两种方式

作者: XLsn0w | 来源:发表于2020-04-05 12:44 被阅读0次

在iOS开发中,常用NSOperation和GCD来做多线程的开发,NSOperation有cancel可以取消还未执行的线程。但是没办法做到取消一个正在执行的线程。

1、类似NSOperation一样,可以取消还未执行的线程。但是没办法做到取消一个正在执行的线程。可以取消还未执行的线程有两种方式:

1.1 iOS8后采用提供的API,通过dispatch_block_cancel可以cancel掉dispatch_block_t,需要注意的是,未执行的可以用此方法cancel掉,若已经执行则cancel不掉;

1.2自己通过设置BOOL 值来让线程不执行线程处理的逻辑。

@implementation ViewController
 
BOOL gcdFlag = NO;
 
- (void)viewDidLoad {
    [super viewDidLoad];
 
    [self gcdTest];
}
 
 
- (void)gcdTest{
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        // 模拟耗时操作
        for (long i=0; i<100000; i++) {
            NSLog(@"i:%ld",i);
            sleep(1);
            // 山不过来,我就过去
            if (gcdFlag==YES) {
                NSLog(@"收到gcd停止信号");
                return ;
            }
        };
    });
 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"发出停止gcd信号!");
        gcdFlag = YES;
    });
}

2、iOS8以后,如果想中断(interrupt)线程,也就是取消一个正在执行的线程,可以使用

dispatch_block_testcancel方法;

相关文章

  • GCD取消还未执行的线程有两种方式

    在iOS开发中,常用NSOperation和GCD来做多线程的开发,NSOperation有cancel可以取消还...

  • 如何自定义NSOperation

    在iOS中使用线程主要是GCD,和NSOperation 两种方式。 GCD 对线程依赖,线程取消支持的不是很好,...

  • iOS相关 | GCD学习

    GCD核心概念:任务和队列 任务:在线程中执行的那段代码。执行方式有两种:同步执行和异步执行 * 同步执行:只能在...

  • 三十七、多线程之(一)GCD

    iOS中常见的多线程方案 GCD执行方式:dispatch_sync()和dispatch_async()两种方式...

  • 高级iOS面试题全纪录

    iOS基础: 多线程使用,gcd跟operation区别,怎么取消正在执行的gcd任务 GCD 系列知识总结 NS...

  • iOS 多线程面试题(任务、队列)

    任务 就是执行操作的意思,也就是在线程中执行的那段代码。在 GCD 中是放在 block 中的。执行任务有两种方式...

  • iOS 多线程

    常见多线程方案 GCD 用同步的方式执行任务 用异步的方式执行任务 GCD源码:https://github.co...

  • ***线程,GCD,runloop(2)

    第三篇:多线程编程的多种方式 iOS执行多线程编程常用的有以下几种方式 NSThread GCD NSOperat...

  • 多线程与GCD执行原理

    多线程与GCD执行原理 GCD 含义 可以生成必要的线程并计划执行任务 实现原理 GCD有一个底层线程池,这个池中...

  • 关于多线程笔记

    1.GCD线程延迟 2.GCD后台执行 3.GCD主线程执行 4.GCD一次性执行

网友评论

      本文标题:GCD取消还未执行的线程有两种方式

      本文链接:https://www.haomeiwen.com/subject/cghuphtx.html