Свифт запланированныйВремя задержки? - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь создать приложение, которое выполняет функцию каждые две секунды. Для этого я использую функцию Timer.scheduledTimer. Проблема в том, что функция не выполняется каждые две секунды, как следует. Обычно интервал в начале приложения составляет 2 секунды, но позже (примерно через полминуты) этот интервал иногда составляет 7 секунд, иногда 13 и т. Д.

Вот мой код:

import Cocoa

class ViewController: NSViewController {

    @objc func glavno(){

      let date = Date()
      var calendar = Calendar.current
      calendar.timeZone = TimeZone(identifier: "UTC")!              
      let components = calendar.dateComponents([.hour, .year, .minute], from: date)
      let hour = calendar.component(.hour, from: date)
      let minutes = calendar.component(.minute, from: date)
      let seconds = calendar.component(.second, from: date)
      print("\(hour):\(minutes):\(seconds)")

    }

    var timer = Timer()

    override func viewDidLoad() {

        //Load UI
        super.viewDidLoad()

        //Start the task
        timer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(self.glavno), userInfo: nil, repeats: true)  

    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }

}

Итак, какова функция приложения, оно печатает время каждые две секунды. Это вывод, который я получаю (вы видите, что функция не выполняется каждые две секунды на каждом интервале):

20:9:21
20:9:23
20:9:25
20:9:37
20:9:49
20:10:1
20:10:3
20:10:5
20:10:17
20:10:23

Я новичок в языке Swift, может кто-нибудь, пожалуйста, укажите мне справанаправление? Я также попытался сделать это без таймера, но просто использовал функцию с бесконечным циклом (while (true)) и спал в течение двух секунд в этом цикле после того, как время было напечатано.

Я использую Swift версии 5.0.1, если это имеет значение.

Спасибо!

1 Ответ

0 голосов
/ 02 октября 2019

App Nap было причиной этого: Таймер Swift не работает в точное время

Вот как я это исправил / отключил App Nap для своего приложения: Отключить приложениесон в Swift

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