我是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使用率很高),并且必须有比这更好的方法。
所以问题是
在这种情况下,我必须使用GCD而不是Thread吗?
为此工作的最佳方法是什么?
谢谢