gpt4 book ai didi

ios5 - 大中央调度。如何查询队列以查看它是否正在使用?

转载 作者:行者123 更新时间:2023-12-04 05:53:36 25 4
gpt4 key购买 nike

检测我创建的队列当前是否正在使用的最佳/最简单方法是什么?我的意图是推迟一个特定的 Action ,直到所有排队的任务都完成。

谢谢,
道格

更新

这里有更多的上下文。我有一个异步串行队列(私有(private)调度队列),它是我的对象的一个​​属性。当此队列完成其工作时,它会调用 dispatch_async(dispatch_get_main_queue(), {...})更新用户界面。目前,该应用程序仅以横向界面方向运行。我现在添加对纵向和横向界面方向的支持。目前,我不希望在我的 GCD 异步任务运行时允许界面在纵向/横向之间旋转。所以在我的 Controller 的shouldAutorotateToInterfaceOrientation:我要返回的方法NO在那些时期。

最佳答案

GCD 中没有对此的直接支持。不过,您可能可以通过其他方式获得您正在寻找的效果。

  • 您是否只想在其他 block 完成后运行一个 block ?将积木放入 dispatch_group , 并使用 dispatch_group_notify 提交您的“完成所有操作后” .这适用于并发或顺序队列。
  • 同样,将您的积木放在一个组中,然后调用 dispatch_group_wait(group, DISPATCH_TIME_NOW) .如果它返回非零,那么组中有未完成的 block 。
  • 您的队列是连续的,并且您想等到其他 block 完成,然后阻塞当前线程吗?只需使用 dispatch_sync 发出您的处理程序在同一个队列中。

  • 还有其他可能性,具体取决于您的具体情况。

    编辑:根据您的更新,还有一种更简单的方法:
  • 添加 BOOL View Controller 的属性,称为 allowsOrientationChange
  • 覆盖 -shouldAutorotateToInterfaceOrientation:返回 self.allowsOrientationChange
  • 在你的工作 block 开始时,执行 dispatch_async将属性设置为 NO
  • 在你的工作 block 结束时,执行 dispatch_async将属性设置为 YES

  • (在主线程上的属性设置为 NO 与队列中发生其余工作之间存在一点竞争条件。如果这真的很重要,您可以将其设为 dispatch_sync。取决于什么我想你的理由是为了防止轮换。)

    关于ios5 - 大中央调度。如何查询队列以查看它是否正在使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9777741/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com