取消线程的执行

原创 2015年11月20日 22:52:33
  • cancel:方法仅仅是给线程标记为取消状态。但是要想真正取消线程的执行,必须在线程内部判断

//打上取消标识



- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    // 创建线程 -- 新建状态
    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(demo) object:nil];
    // 将线程添加到可调度线程池中,等等CPU调度
    [thread start];
    // 睡会
    [NSThread sleepForTimeInterval:1.2];
    // 取消线程
    // cancel:方法仅仅是给线程标记为取消状态。但是要想真正取消线程的执行,必须在线程内部判断。
    [thread cancel];
}
  • 在关键时刻取消
// 一个方法内部的代码是在同一个线程中执行的
- (void)demo {
    NSLog(@"睡会 = %@",[NSThread currentThread]);
    if ([NSThread currentThread].isCancelled) {
        NSLog(@"1...88");
        return;
    }
    [NSThread sleepForTimeInterval:1.0];
    // 在关键节点判断线程是否被取消
    if ([NSThread currentThread].isCancelled) {
        NSLog(@"2...88");
        return;
    }
    for (NSInteger index = 0; index < 20; index ++) {
        if ([NSThread currentThread].isCancelled) {
            NSLog(@"3...88");
            return;
        }
        // 在满足某个条件的时候,再睡
        if (index == 10) {
            NSLog(@"再睡");
            // 睡到指定的时间
            [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
        }
        NSLog(@"%@--%zd",[NSThread currentThread],index);
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS runloop 详解3 如何停止子线程的runloop

http://w11h22j33.iteye.com/blog/1998620 http://www.hrchen.com/2013/06/multi-threading-program...
  • jeffasd
  • jeffasd
  • 2016年07月25日 14:13
  • 4992

终止线程的三种方法

有三种方法可以使终止线程。    1.  使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。    2.  使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend...
  • zhanjichun_2008
  • zhanjichun_2008
  • 2011年07月17日 23:25
  • 68378

ios-设置线程满足某个条件销毁

有的时候我们可能会用到NSThread来进行创建线程然后去执行任务,但是如果我们想让一个任务在执行之后可以再接下去执行下一个任务的话。如果前一个任务执行的够快的话,这个线程就会被销毁了,我们应该如何去...
  • ZCMUCZX
  • ZCMUCZX
  • 2017年12月06日 11:25
  • 174

iOS 线程退出

主要做法: 一: 在子线程代码:[runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; 然后在主线程呼...
  • itjobtxq
  • itjobtxq
  • 2012年09月20日 09:08
  • 1726

控制线程(NSThread)和运行时循环(NSRunLoop)的退出

原文地址:http://shaheengandhi.com/controlling-thread-exit/ 这是讲iOS的线程的文章,下面的内容,自己都惨不忍睹啊,哈哈,翻译一下文章,尽量止步吧...
  • wzf906819823
  • wzf906819823
  • 2015年08月02日 15:15
  • 2757

如何立即结束一个线程?

如何立即结束一个线程? 本文是作者在实际经验中的心得与体会,开发环境为苹果系统。如果有更好的方式请留言,高手请忽略。转载请注明作者以及出处。 背景平时开发中经常会有这么个需求:实现在线程中循环执行...
  • detecyang
  • detecyang
  • 2016年03月11日 23:44
  • 1516

iOS 多线程编程<十、NSOperationQueue最大并发量、暂停、取消>

NSOperationQueue最大并发量、暂停、取消 需要注意的是,当使用暂停、取消任务时,需要等到正在执行的任务执行完成后,才会执行这个动作。其中取消任务的动作不可逆,取消之后任务不能重新开启。...
  • ZhengYanFeng1989
  • ZhengYanFeng1989
  • 2016年10月20日 14:24
  • 1585

iOS线程休眠及取消

在Java(Android)开发中,Thread调用了sleep后,interrupt能够使sleep中的Thread马上唤醒,但iOS中并未找到直接支持Thread休眠中唤醒的方式。 iO...
  • afunx
  • afunx
  • 2015年09月16日 13:21
  • 8243

iOS runloop 详解3 子线程runloop的启动与停止

// // ViewController.m // test_runloop_01 // // Created by jeffasd on 16/7/25. // Copyright © 20...
  • jeffasd
  • jeffasd
  • 2016年07月25日 14:14
  • 2774

如何取消GCD任务

第一种:dispatch_block_cancel      iOS8之后可以调用dispatch_block_cancel来取消(需要注意必须用dispatch_block_create创建d...
  • qq_33777090
  • qq_33777090
  • 2017年11月26日 19:57
  • 176
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:取消线程的执行
举报原因:
原因补充:

(最多只允许输入30个字)