取消线程的执行

原创 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 runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; 然后在主线程呼...

如何立即结束一个线程?

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

终止线程的三种方法

有三种方法可以使终止线程。    1.  使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。    2.  使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend...

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

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

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

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

iOS线程休眠及取消

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

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
  • 4599

iOS延迟调用和取消延迟调用

iOS开发延迟调用,系统提供了二种方法。 1. performSelector这二个方法是延迟调用的方法。 cancel是取消延迟调用的方法。 具体用法详解: 注意:取消延迟调用时,...

IOS 取消延迟执行函数 (perform selector)

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(xxxx) object:nil];

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:取消线程的执行
举报原因:
原因补充:

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