使用runloop阻塞线程

    xiaoxiao2026-06-06  2

    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; }

    转载请注明原文地址: https://ju.6miu.com/read-1310264.html
    最新回复(0)