[objective-c]检查是否调度队列不能跟上任务和累积

发布时间: 2016/10/2 11:50:20
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我使用一个串行调度队列来改变图像来自照相机为间隔拍摄视频应用程序。到目前为止我用最大公因数来卸载图像处理到第二个线程。

我期望应用程序要运行很长时间,不想以某种方式压倒具有处理请求的设备。

有一种检查是否调度队列不能跟上操作添加到它 (创建待办事项) 的数量方法?

dispatch_async(backgroundQueue, ^{

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

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

解决方法 1:

你有你想要在此队列在决定之前,它已累积中执行的任务的具体数目吗?如果是这样,使用 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);
        });
    }

您可以指定一个超时时间,然后检查返回值的 dispatch_semaphore_wait 看到你超时,然后创建一个新的队列或只是等待,直到该队列释放等。

官方微信
官方QQ群
31647020