我正在编写一个 iOS 应用程序,其中多个 iDevice 可以相互连接并相互发送消息。当 iDevice1 向 iDevice2 发送消息时,我希望将该消息插入到 iDevice2 的队列中。 iDevice2 上的一个单独的后台线程现在通过这个队列并使消息出队。我的问题有两个,如下所示:
- 实现无限循环(直到应用程序终止)并从队列中轮询和出列项目的后台线程的最佳方法是什么?
- 在循环后台线程和将消息插入队列的线程之间共享队列的最佳方法是什么?
我一直在使用 dispatch_async grand central dispatch 方法在不同的线程中执行任务,并且效果很好。我应该使用 dispatch_async 方法来启动轮询队列的后台线程吗?这种方法是否负责切换到其他线程,或者后台线程是否会占用处理器,因为它正在进行无限循环?感谢任何帮助,谢谢!
最佳答案
这里更重要/有趣的问题是,为什么你有一个后台线程(轮询或其他方式)馈入 GCD 队列,而不是简单地使整个事情成为一个基于 GCD 的工作流, block 在一个队列上运行(可能与一个队列相关联)调度源或信号量)将工作提交到工作队列中。换句话说,管理 iDevice1 和 iDevice2 的代码都应该使用 GCD 编写并表达工作流的意图,而不是进行任何手动线程管理。代码将更易于理解和维护!
关于ios - 在一个线程和另一个轮询线程之间共享一个队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12553811/