检查调度队列是否无法跟上任务并积压

Ale*_*one 3 multithreading cocoa-touch objective-c grand-central-dispatch ios9

我正在使用串行调度队列来改变来自相机的图像以获取间隔拍摄视频应用.到目前为止,我正在使用GCD将图像处理卸载到第二个线程.

我希望该应用程序可以运行很长时间,并且不希望以某种方式压倒设备处理请求.

有没有办法检查调度队列是否无法跟上添加到它的操作数量(创建积压)?

dispatch_async(backgroundQueue, ^{

    __block UIImage* backupImage = self.thermalImage;
    backupImage = [self imageByDrawingCircleOnImage:backupImage];

    dispatch_async(dispatch_get_main_queue(), ^{
        [self.thermalImageView setImage:backupImage];
    });
});
Run Code Online (Sandbox Code Playgroud)

Ric*_*hal 5

在确定它已经积压之前,您是否要在此队列中执行特定数量的任务?如果是,请使用a semaphore来限制队列中的任务数.

    dispatch_semaphore_t semaphore = dispatch_semaphore_create(3);
    dispatch_queue_t queue = dispatch_queue_create("com.foo.queue", DISPATCH_QUEUE_CONCURRENT);

    for(int i = 1; i < 7; i++) {
        dispatch_async(queue, ^{
            dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
            NSLog(@"hello from #%d", i);
            [NSThread sleepForTimeInterval:2];
            dispatch_semaphore_signal(semaphore);
        });
    }
Run Code Online (Sandbox Code Playgroud)

您可以指定超时,然后检查返回值,dispatch_semaphore_wait以查看是否超时,然后创建新队列或等待队列释放等.