我有一个使用 NSThreads 执行并发任务的 iOS 应用程序。我将尝试将其迁移到使用 Grand Central Dispatch (GCD) 来处理并发。
问题是应用程序需要有关自给定时间以来创建了多少线程的信息。以及自给定时间以来产生的线程数当前正在运行。
目前,这是通过创建一个类别来完成的,该类别-main
对NSThread
. 在新的 swizzled 方法中,它只是增加正在运行的线程总数,然后在新的 swizzled-main
方法返回之前减少相同的变量。
问题是当我使用 GCDdispatch_async
时它不会创建一个NSThread
,因此我的类别方法不起作用。在使用 GCD 处理并发时如何实现相同的目标?
我想检测的是何时将新块添加到 GCD,以及何时执行该块。
任何关于如何实现相同目标的建议都非常受欢迎。
编辑
非常感谢@ipmcc 和@RyanR 帮助我解决这个问题。:) 我相信我需要多讲一些关于背景和我想要完成的事情。
我实际上正在尝试的是扩展 iOS 测试框架Frank。Frank
在给定的应用程序中嵌入一个小型 Web 服务器,该服务器可以向 iOS 应用程序发送 HTTP 请求,从而模拟事件、滑动或点击手势作为示例。
我想以某种方式对其进行扩展,使其能够等到由特定模拟事件触发的所有工作都结束,然后再根据请求返回。
但是,我发现很难准确检测到接收到的事件触发了哪些工作。这就是我如何找到解决方案,只需重置一个线程计数器,然后在模拟事件后为所有创建的线程增加这个计数器,并在线程完成时减少它。然后阻塞直到线程数再次变为零。我知道这种方法也不完美,它不适用于 GCP。
还有其他方法可以实现吗?我想到的另一种可能的解决方案是指定除了处理 HTTP 请求的线程之外的所有内容都必须同步运行。但是我不知道这是否可能。
关于如何在每个模拟事件之后实现阻塞直到该事件触发的工作完成的任何建议?