3

如何检查 dispatch_queue_t 变量之间的相等性?

dispatch_queue_t currentQueue = dispatch_get_current_queue();
dispatch_queue_t mainQueue = dispatch_get_main_queue();
if (currentQueue == mainQueue) {

}

来自文档:

typedef struct dispatch_queue_s *dispatch_queue_t;

我不确定,但这是否意味着它是一个指向 dispatch_queue_s 结构的指针?

由于我无法检查指针的相等性,我不确定如何检查 dispatch_queue_t 是否与另一个相同?

4

3 回答 3

23

由于dispatch_get_current_queue()已被弃用,我们可以通过标签(或@jkh 建议的细节)比较当前队列和您的队列

用于标签

dispatch_queue_get_label(dispatch_queue_t queue);

并通过 DISPATCH_CURRENT_QUEUE_LABEL 获取当前队列的标签

具体来说:

dispatch_queue_get_specific(dispatch_queue_t queue, const void *key);

让你排队特定和

dispatch_get_specific(const void *key);

对于当前

需要为您的队列设置标签和特定的一个或两个。例如,当您创建它时

dispatch_queue_create(const char *label, dispatch_queue_attr_t attr);

或针对特定使用设置器

dispatch_queue_set_specific(dispatch_queue_t queue, const void *key,
    void *context, dispatch_function_t destructor);
于 2014-04-22T13:15:10.520 回答
2

答案的第一部分:你想做什么?为什么需要比较队列?如果您需要做的只是用一些特定的元数据“标记”队列,请考虑使用 dispatch_queue_{set, get}_specific() 代替。

答案的第二部分:不要将 dispatch_get_current_queue() 用于任何事情。它仅用于调试目的,一直不鼓励使用。

于 2012-09-27T02:00:32.527 回答
1

这取决于您所在的队列。在这种特殊情况下使用:

if ([NSThread isMainThread]) {}

通常,您可以使用dispatch_get_current_queue()来测试您所在的队列。在这种情况下,您可以使用==运算符来执行此操作。引用 Apple 并发编程指南中的 Dispatch Queues 页面:

使用 dispatch_get_current_queue 函数进行调试或测试当前队列的身份。从块对象内部调用此函数会返回块被提交到的队列(并且它现在可能正在运行)。从块外部调用此函数会返回应用程序的默认并发队列。

于 2012-09-26T18:18:16.927 回答