Добрый вечер коллеги!
Для мониторинга прогресса одного процесса я использую следующий код:
private var progressObservationContext = 0
var progressControl = String()
// код в потоке, в котором выполняется процесс, прогресс которого нужно мониторить
progressControl = "miRNAInducedSampleProgress"
let options : NSKeyValueObservingOptions = [.new, .old, .initial, .prior]
self.miRNAControlSampleProgress.addObserver(self, forKeyPath: "localizedDescription", options: options, context: &progressObservationContext)
self.miRNAControlSampleProgress.isCancellable = true
self.miRNAControlSampleProgress.totalUnitCount = Int64(myArray.count)
for each in myArray
{
...
self.miRNAControlSampleProgress.completedUnitCount += 1
}
self.miRNAControlSampleProgress.removeObserver(self, forKeyPath: "localizedDescription")
//мониторинг
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?)
{
guard context == &progressObservationContext else {
super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
return
}
if let theKeyPath = keyPath {
switch theKeyPath {
case "localizedDescription":
OperationQueue.main.addOperation {
let progress = (object as! Progress)
if self.progressControl == "miRNAInducedSampleProgress"
{
self.inducedMiRNAPercentProgressText.stringValue = progress.localizedDescription
}
}
default:
print("Unknown value")
}
}
Вопрос сдедующий. Есть несколько процессов, которые могут быть запущены одновременно и нужно в параллель выводить для них прогресс, т.е. получать localizedDescription. Как это делается, подскажите пожалуйста!