2015-08-28 65 views
3

我接手深受客户的员工谁是新的iOS开发(并从此离开公司)你可以查询一个GCD串行队列中的待处理数量吗?

我试图让一个手柄的一个写的客户端应用程序的所有权/提高它的使用的并发性。它创造了一系列不同延迟的不同GCD定时器,并且时机非常混乱。

我可能会将其转换为使用GCD串行队列,因为我需要按顺序运行任务(但不在主线程中)。我想监视未完成任务的深度上队列。 NSOperationQueues有一个用于查看待处理任务数量的工具,但我没有看到类似的GCD串行队列选项。有这样的设施吗?

我想我可以构建一个NSOperationQueue,并使每个操作都依赖于以前的操作,从而创建一个串行操作队列,但是这对于诊断任何一个队列中的任务数量很简单时间。

回答

7

没有公共API来查询GCD队列中的任务数量。你可以自己创建一些东西,或者使用NSOperationQueue。如果你想建立的东西,你可以换dispatch_a/sync递增计数器,然后排队另一块与递减计数器,这样每个操作:

int64_t numTasks = 0 

void counted_dispatch_async(dispatch_queue_t queue, dispatch_block_t block) 
{ 
    OSAtomicIncrement64(&numTasks); 
    dispatch_async(queue, ^{ 
     block(); 
     OSAtomicDecrement64(&numTasks); 
    }); 
} 

或者你可以只使用NSOperationQueue。这就是我要做的。一位智者曾告诉我:“使用最高级别的抽象来完成工作。”

相关问题