如何检查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是否与另一个相同?
答案 0 :(得分: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);
或使用特定的
的setterdispatch_queue_set_specific(dispatch_queue_t queue, const void *key,
void *context, dispatch_function_t destructor);
答案 1 :(得分:2)
答案的第一部分:你想做什么?你为什么需要比较队列?如果您需要做的只是“标记”具有某些特定元数据的队列,请考虑使用dispatch_queue_ {set,get} _specific()代替。
答案的第二部分:不要使用dispatch_get_current_queue(),以及任何东西。它仅用于调试目的,并且一直不鼓励使用它。
答案 2 :(得分:1)
这取决于您所在的队列。在这种特殊情况下使用:
if ([NSThread isMainThread]) {}
通常,您可以使用dispatch_get_current_queue()
来测试您所在的队列。在这种情况下,您可以使用==
运算符来执行此操作。引用Apple的并发编程指南中的Dispatch Queues页面:
使用dispatch_get_current_queue函数进行调试或 测试当前队列的标识。从中调用此函数 块对象内部返回块所在的队列 提交(并且现在可能正在运行)。打电话给这个 来自块外部的函数返回默认的并发队列 为您的申请。