【问题标题】:How to implement OperationQueue with audioFileUrls - Swift - Xcode 11 beta 5如何使用 audioFileUrls 实现 OperationQueue - Swift - Xcode 11 beta 5
【发布时间】:2019-08-15 20:38:06
【问题描述】:

我正在尝试实现 NSOperationQueue 以便能够取消合并音频文件的进程(使用 (audioFileUrls: NSArray) 方法)但我不知道如何实现它,我对不同的示例感到困惑可访问性。有人可以在我在这里提供的示例中添加缺少的代码吗?谢谢。

Import Cocoa
Import AVFoundation

let queue = OperationQueue.main

@IBAction func build(_ sender: NSButton){
   builder()
}

@IBAction func cancel(_ sender: NSButton){
   queue.cancelAllOperations()
}

func builder() {
   queue.maxConcurrentOperationCount = 1                   
   queue.addOperation {...}
}

【问题讨论】:

    标签: swift xcode nsoperationqueue


    【解决方案1】:

    您应该创建自己的队列

    lazy var myOperationQueue: OperationQueue = {
        var queue = OperationQueue()
        queue.name = "Image merge queue"
        queue.maxConcurrentOperationCount = 1
        return queue
      }()
    

    然后在builder()中使用它

    func builder() {
       myOperationQueue.addOperation {...}
    }
    

    另外请记住,取消不会取消当前正在执行的操作documentation

    取消操作不会自动将它们从队列中删除或停止当前正在执行的操作。

    【讨论】:

    • 感谢您的回答。队列创建良好('myOperationQueue.name' : com.apple.main-thread)并处于活动状态('myOperationQueue.isSuspended' = false),该过程继续进行,使用'myOperationQueue.cancelAllOperations()'后,它保持一直跑到最后。在我看来,不是因为进程仍然存在,而是因为队列的状态仍然相同('myOperationQueue.isSuspended' = false(即使在运行 'myOperationQueue.cancelAllOperations()' 之后))。这很奇怪
    • You should create your own queue 并且不要使用主队列,你不应该 cancelAllOperations() 主队列它会阻塞 UI 并且不会阻塞任何操作。
    猜你喜欢
    • 2019-12-19
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多