我一直在尝试找到 iOS 上的 pthread 和调度队列之间的关联。例如,给定一个pthread_t
对象,是否有可能找出关联的调度队列(如果有的话)?
我见过各种各样的*get_current_*()
API *get_specific_*()
—— 只有当我知道以前使用的键来设置上下文,或者我已经有一个dispatch_queue_t
对应于我想要其标签的调度队列时,它们才有用。
我正在寻找的只是获取所有调度队列的列表(私有/串行的 - 在应用程序中创建),以便我可以通过某种方式获取dispatch_queue_t
对象,从而使用这些来查找与该应用程序线程的关联处理并因此打印他们的名字。
编辑(我在考虑 Das 的建议后得到的解决方案 - thread_info()
):我得到了调度队列的名称!我不得不使用thread_info()
来掌握dispatch_qaddr
每个线程。然后,我将其内容dispatch_qaddr
类型处理为类型uint64_t
,(dispatch_queue_t *)
并根据需要取消引用以传递给以dispatch_queue_get_label()
获取标签。这里的技巧是以安全的方式检查给定时间点的线程是否正在执行调度队列的代码块。dispatch_queue_get_label()
否则,对我们传递的对象所做的内部操作可能会使应用程序崩溃。所以,我不得不使用一些特定于平台的 API 来验证结果对象内容的有效性是否正确 size: sizeof(dispatch_queue_t)
,假设dispatch_queue_t
是不透明的类型。是的,我很高兴看到我想要的!干杯! \米/