Objective c 检查调度队列是否跟不上任务,并且是否已积压
我正在使用一个串行调度队列来更改来自timelapse视频应用程序相机的图像。到目前为止,我正在使用GCD将图像处理卸载到第二个线程 我希望该应用程序能够运行很长时间,并且不希望以某种方式处理请求而淹没设备 是否有办法检查调度队列是否跟不上添加到队列中的操作数(创建积压)?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
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