gpt4 book ai didi

swift - 如何同时调用多个操作

转载 作者:行者123 更新时间:2023-11-30 11:01:20 25 4
gpt4 key购买 nike

我知道我可以使用 GCD 或 OperationQueue 来执行并发工作负载,但我一直在尝试寻找一种调用多个函数并让它们同时启动的方法。

我的项目是一次触发多个网络摄像头以同步来自不同相机的照片。

我在这里找到了这篇关于如何同时显示来自多个网络摄像头的多个提要的文章:Run multiple AVCaptureSessions or add multiple inputs

到目前为止,我还不确定如何触发这些照片捕获,但我首先想看看如何同步对该函数的调用。

我的理论解决方案是这样的:

  • 创建并发操作队列
  • 这样我就可以手动启动操作队列,而不是自动启动每个操作,因为它会添加到队列中(如何?)
  • 添加一个从关联视频输入中拍摄照片的操作。每个相机一次
  • 启动操作队列
  • 等待操作完成
  • 继续工作流程

这可能吗?

如果不是,真的可以同时调用多个方法吗?

如果这甚至不可能,我将如何同步照片捕获,也许录制一个短视频,在录制开始之前使用时间戳来调整延迟并在生成的视频中的特定时间捕获帧?

还在评论中,用 swift 构建的 MacOS 应用程序的标签是什么?这是我第一次提出这个问题,而不是 iOS,因此这将有助于找到可能提供帮助的人。

感谢您能给我的任何见解!

最佳答案

您的方向是正确的,(NS)OperationQueue 就是为此而设计的。下面是一个例子:

func operation1() {
print("\(#function) starts")
sleep(1)
print("\(#function) ends")
}

func operation2() {
print("\(#function) starts")
sleep(2)
print("\(#function) ends")
}

func operation3() {
print("\(#function) starts")
sleep(3)
print("\(#function) ends")
}

@IBAction func start(_ sender: Any) {
let operation = BlockOperation(block: {})
operation.addExecutionBlock { self.operation1() }
operation.addExecutionBlock { self.operation2() }
operation.addExecutionBlock { self.operation3() }

let endOperation = BlockOperation { self.allFinished() }
endOperation.addDependency(operation)

let queue = OperationQueue()
queue.addOperations([operation, endOperation], waitUntilFinished: false)
}

func allFinished() {
print("all finished")
}

操作1, 2, 3可以以任意顺序开始,但完成顺序始终为1,2,3,然后触发allFinished

关于swift - 如何同时调用多个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53330203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com