Swift 3 - 仅限一个项目的队列

时间:2017-06-26 20:51:16

标签: ios swift queue

我使用OpenCV处理来自实时视频源的帧,并且处理非常密集。这可能需要2-3秒。可以忽略处理帧时记录的所有帧。

基本上,我们在前台显示连续的帧流。我们采用下一个可用的框架并在后台处理它。在此帧处理的下一个2-3秒内,我希望所有下一帧继续在前台不间断地显示。我不需要处理这些。但是,一旦背景框架完成,我想抓住最新的可用框架并将其发送出去进行处理。

我是Swift排队的新手。我认为这是我应该看的队列,有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

可能最简单的方法是使用背景DispatchQueue。以异步方式执行帧处理,然后切换回主队列以显示结果并递归调用该函数,直到您决定停止为止。切换回主线程以进行任何UI更新尤为重要。

func processNextAvailableFrame() {
    DispatchQueue.global(qos: .background).async {
        // Grab a frame to process
        // Process frame

        DispatchQueue.main.async {
            // Back on main thread, show result of processing frame
            // Call processFrame() again, as needed.
            let shouldKeepGoing = true // determine this somehow
            if shouldKeepGoing {
                self.processNextAvailableFrame()
            }
        }
    }
}