Я новичок в Свифте, и у меня нет особого опыта. И дело в том, что у меня возникает проблема высокой загрузки ЦП (более 100% использования процессора в сеансе отладки Xcode), когда я добавляю следующие коды.
Для реализации бесконечного рабочего потока я использовал GCD (наиболее рекомендуемый способ во многих статьях), включая структуру while-loop.
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!))
}
}
}
}
И я заметил, что это ужасная практика (высокая загрузка ЦП), и должен быть способ лучше, чем этот.
Так что вопросы
Должен ли я использовать GCD вместо Thread в этом случае?
Как лучше для этого работать?
Спасибо