使用runloop阻塞线程

来源:互联网 发布:php代练工作室网站源码 编辑:程序博客网 时间:2024/05/17 08:09

RunLoop从字面上看是运行循环的意思,这一点也不错,它确实就是一个循环的概念,或者准确的说是线程中的循环。

每一个线程都有其对应的RunLoop,但是默认非主线程的RunLoop是没有运行的,需要为RunLoop添加至少一个事件源,然后去run它。一般情况下我们是没有必要去启用线程的RunLoop的,除非你在一个单独的线程中需要长久的检测某个事件。


使用runloop阻塞线程直接上代码:

- (void)viewDidLoad {    [super viewDidLoad];    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{        NSLog(@"========1========");        [self Test1];        while (!end) {            NSLog(@"========runloop start========");            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];            NSLog(@"========runloop end========");        }        NSLog(@"========5========");    });    // Do any additional setup after loading the view, typically from a nib.}-(void)Test1{    NSBlockOperation *block = [[NSBlockOperation alloc] init];    [block addExecutionBlock:^{        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{            sleep(3);            NSLog(@"========3========");            [self Test2];        });    }];    [block setCompletionBlock:^{        NSLog(@"========2========");    }];    [block start];}-(void)Test2{    NSLog(@"========4========");    end = YES;}


0 0
原创粉丝点击