如何在Swift中实现“无尽任务”

时间:2019-04-24 15:55:10

标签: swift multithreading grand-central-dispatch

我是Swift的新手,对此我没有太多经验。问题是,添加以下代码时,我遇到了CPU使用率高的问题(Xcode Debug会话中的CPU使用率超过100%)。

为了实现无尽的工作线程,我使用了GCD(许多文章中最推荐的方式),包括while循环结构。

private let engineQueue = DispatchQueue(label: "engine queue", qos: .userInitiated)

public func startEngine() {
        engineQueue.async {
            while true {
                if (self.captureManager.isSessionRunning) {
                    guard let frame = self.captureManager.frameQueue.popFrame(),
                        let buf = frame.getYPlanar() else {
                            continue
                    }

                    // process a frame
                    self.engine.processNewFrame(buf: buf, width: Int32(frame.cols!), height: Int32(frame.rows!))
                }
            }
        }
    }

我注意到这是一个糟糕的做法(CPU使用率很高),并且必须有比这更好的方法。

所以问题是

  1. 在这种情况下,我必须使用GCD而不是Thread吗?

  2. 为此工作的最佳方法是什么?

谢谢

0 个答案:

没有答案