我正在使用串行调度队列来更改来自相机的图像以用于延时视频应用。到目前为止,我正在使用 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_semaphore_wait
的返回值以查看您是否超时,然后创建一个新队列或等待队列空闲等。
关于objective-c - 检查调度队列是否跟不上任务并积压,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34935316/