Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 您能否查询GCD序列队列中待处理TAK的数量?_Ios_Objective C_Grand Central Dispatch - Fatal编程技术网

Ios 您能否查询GCD序列队列中待处理TAK的数量?

Ios 您能否查询GCD序列队列中待处理TAK的数量?,ios,objective-c,grand-central-dispatch,Ios,Objective C,Grand Central Dispatch,我将接管一个客户端应用程序的所有权,该客户端应用程序由一名刚接触iOS开发的客户员工编写(后来离开了公司) 我正在尝试处理/改进它对并发性的使用。它创建了一堆不同的GCD计时器,具有不同的延迟,而且计时非常混乱 我可能会将其转换为使用GCD串行队列,因为我需要按顺序运行任务(但不是在主线程上)。我希望监视挂起的任务在队列上的深度。NSOperationQueues有一个查看挂起任务数量的工具,但我没有看到GCD串行队列的类似选项。有这样的设施吗 我想我可以构建一个NSOperationQueue

我将接管一个客户端应用程序的所有权,该客户端应用程序由一名刚接触iOS开发的客户员工编写(后来离开了公司)

我正在尝试处理/改进它对并发性的使用。它创建了一堆不同的GCD计时器,具有不同的延迟,而且计时非常混乱

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


我想我可以构建一个NSOperationQueue,并使每个操作依赖于前一个操作,从而创建一个串行操作队列,但这需要大量的工作来简单地诊断任何时候队列中的任务数。

没有公共API来查询GCD队列中的任务数。您可以自己构建一些东西,也可以使用
NSOperationQueue
。如果您想构建一些东西,您可以包装
dispatch\u 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。那就是我要做的。一位智者曾经告诉我,“使用最高级别的抽象来完成工作。”

投票赞成“使用最高级别的抽象来完成工作。”