取消线程的执行

原创 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 保留子线程不退出可以继续执行任务

[self performSelector:@selector(time) onThread:self.thred withObject:nil waitUntilDone:NO];    ...

iOS线程休眠及取消

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

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

http://w11h22j33.iteye.com/blog/1998620 http://www.hrchen.com/2013/06/multi-threading-program...

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

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

iOS多线程及异步处理

概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算。可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行。但是机器码是按顺序执行的,一个复杂的...

如何立即结束一个线程?

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

IOS 关于取消延迟执行函数的种种。performSelector与cancelPreviousPerformRequestsWithTarget

@interface NSObject (NSDelayedPerforming) - (void)performSelector:(SEL)aSelector withObject:(id)anA...

线程取消(pthread_cancel)

基本概念 pthread_cancel调用并不等待线程终止,它只提出请求。线程在取消请求(pthread_cancel)发出后会继续运行, 直到到达某个取消点(CancellationPoint)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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