Как сохранить процесс приложения MacOS работающим, когда приложение находится в фоновом режиме или включен экран блокировки - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть приложение, в котором есть несколько долго выполняющихся процессов для генерации отчетов - для их запуска может потребоваться 5 или 10 минут, но как только пользователь переключается на другое приложение, процессы отчета приостанавливаются. Точно так же, если пользователь блокирует Ma c, приложение прекращает обработку.

Что происходит? Это какая-то новая функция macOS - у меня сложилось впечатление, что процессы будут продолжать работать с использованием неактивного процессорного времени - что составляет большую часть процессорного времени, если не работают другие приложения.

Я перепробовал все энергосбережения и Настройки безопасности безрезультатны. И да, Ma c подключен к электросети.

1 Ответ

0 голосов
/ 26 апреля 2020

ОК, похоже, ответ заключается в следующем: закройте код, чтобы ОС знала, что вы хотите продолжить обработку, пока приложение находится в фоновом режиме или когда включен экран блокировки.

DispatchQueue.global().async {

   let thisActivity = ProcessInfo.processInfo.beginActivity(options: .userInitiated, reason: "Batch processing user report")

   // Do stuff here 
   // e.g. 
   let operation = Operation()
   let queue = DispatchQueue()
   queue.addOperation(operation)
   queue.waitUntilAllProcessesAreFinished()
   //...

   ProcessInfo.processInfo.endActivity(thisActivity)

}

Я не проверял все опции, чтобы увидеть, все ли они работают, но «.userInitiated» продолжает работать до завершения и НЕ мешает пользователю перевести систему в спящий режим. Другие параметры могут вести себя по-разному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...