美文网首页
如何实现一个能插队的GCD队列

如何实现一个能插队的GCD队列

作者: 秦枫桀 | 来源:发表于2017-04-24 20:14 被阅读0次

需求:

批量执行一些任务的时候,可以有其他任务插进来优先执行,待执行完插队的任务后,继续执行之前的任务。

代码:

//
//  ViewController.m
//  GCD插队的任务
//
//  Created by 秦伟 on 2017/4/21.
//  Copyright © 2017年 秦伟. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()
@property (nonatomic, strong) dispatch_queue_t low;
@property (nonatomic, strong) dispatch_queue_t high;
- (IBAction)buttonAction:(id)sender;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    _low = dispatch_queue_create("com.test.low", DISPATCH_QUEUE_SERIAL);
    _high = dispatch_queue_create("com.test.high", DISPATCH_QUEUE_SERIAL);
    dispatch_set_target_queue(_low, _high);
    
    for (NSInteger i = 0; i < 20; i++) {
        dispatch_async(_low, ^{
            [NSThread sleepForTimeInterval:1.0];
            NSLog(@"low: %ld", i);
        });
    }
    dispatch_async(_low, ^{
        NSLog(@"全部完成!");
    });
}

- (IBAction)buttonAction:(id)sender {
    
    dispatch_suspend(_low);
    dispatch_async(_high,^{
        NSLog(@"high: 插!!!");
        dispatch_resume(_low);
    });
}
@end


相关文章

  • 如何实现一个能插队的GCD队列

    需求: 批量执行一些任务的时候,可以有其他任务插进来优先执行,待执行完插队的任务后,继续执行之前的任务。 代码:

  • 7.多线程基础(七)GCD加强

    1.GCD串行队列和并发队列 2.GCD延时执行 3.GCD线程组:(的作用) 4.GCD定时器: GCD的实现 ...

  • iOS开发的中的多线程 --- GCD

    多线程实现的几种方案 GCD的简介 GCD中有两个很重要的概念: 任务 、队列。队列中存放的就是多个任务,队列的执...

  • 2022-12-05 面试题

    1.用户下载一个大图片,需要分成很多份进行下载,使用GCD应该如何实现?使用什么队列? 回答:1.并行队列2.如果...

  • SDWebImage扩展笔记(一)

    SDWebImage中使用GCD主线程队列 GCD 如何安全获取主线程队列 获取主线程是 dispatch_get...

  • IOS - 多线程

    多线程实现方案 GCD的队列类型 并发队列自己创建的全局 串行队列主队列自己创建的 NSOperationQueu...

  • 【iOS】GCD 2个队列 插队

    线程lineOne 执行任务期间,让lineTwo任务执行后,再执行剩下的lineOne任务。

  • GCD 去实现NStimer

    ///GCD 去实现NSTimer///1 取得一个队列dispatch_queue_t queue = disp...

  • GCD队列、同步异步

    GCD队列、同步异步 GCD队列、同步异步

  • GCD

    GCD的作用?如何使用? GCD是用来处理多线程任务的。 使用: 1.创建一个队列 2.将任务添加到队列中 3.执...

网友评论

      本文标题:如何实现一个能插队的GCD队列

      本文链接:https://www.haomeiwen.com/subject/ajapzttx.html