Objective c 检查调度队列是否跟不上任务,并且是否已积压

Objective c 检查调度队列是否跟不上任务,并且是否已积压,objective-c,multithreading,cocoa-touch,ios9,grand-central-dispatch,Objective C,Multithreading,Cocoa Touch,Ios9,Grand Central Dispatch,我正在使用一个串行调度队列来更改来自timelapse视频应用程序相机的图像。到目前为止,我正在使用GCD将图像处理卸载到第二个线程 我希望该应用程序能够运行很长时间,并且不希望以某种方式处理请求而淹没设备 是否有办法检查调度队列是否跟不上添加到队列中的操作数(创建积压)? dispatch_async(backgroundQueue, ^{ __block UIImage* backupImage = self.thermalImage; backupImage = [sel

我正在使用一个串行调度队列来更改来自timelapse视频应用程序相机的图像。到目前为止,我正在使用GCD将图像处理卸载到第二个线程

我希望该应用程序能够运行很长时间,并且不希望以某种方式处理请求而淹没设备

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

dispatch_async(backgroundQueue, ^{

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

    dispatch_async(dispatch_get_main_queue(), ^{
        [self.thermalImageView setImage:backupImage];
    });
});

在决定此队列是否已积压之前,是否有特定数量的任务要在此队列中执行?如果是这样,请使用
信号灯
限制队列中的任务数

    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);
        });
    }
dispatch\u semaphore\u t semaphore=dispatch\u semaphore\u create(3);
dispatch\u queue\u t queue=dispatch\u queue\u create(“com.foo.queue”,dispatch\u queue\u CONCURRENT);
对于(int i=1;i<7;i++){
调度异步(队列^{
调度信号灯等待(信号灯,调度时间永远);
NSLog(@“hello from#%d”,i);
[NSThread sleepForTimeInterval:2];
调度信号灯(信号灯);
});
}

您可以指定一个超时,然后检查
dispatch\u semaphore\u wait
的返回值,查看是否超时,然后创建一个新队列,或者只是等待队列释放等。

也许您可以改用
NSOperationQueue
。将其设置为串行队列。然后你可以查询排队的操作数。我的回答有用吗?我很久没有使用信号灯了,因此,我希望使用一些函数来检查分派请求的数量:)您必须自己跟踪请求,可能需要在进入队列之前使用OSAtomicIncrement32Barrier,在队列中的块完成时使用OSAtomicDecrement32Barrier