Swift scheduledTimer 滞后?
Swift scheduledTimer lag?
我正在尝试制作一个每两秒执行一次功能的应用程序。为此,我使用 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,如果重要的话。
谢谢!
App Nap 是造成这种情况的原因:Swift timer is not executing on precise time
以下是我为我的应用程序修复 it/disabled App Nap 的方法:Disable app nap in Swift
我正在尝试制作一个每两秒执行一次功能的应用程序。为此,我使用 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,如果重要的话。
谢谢!
App Nap 是造成这种情况的原因:Swift timer is not executing on precise time
以下是我为我的应用程序修复 it/disabled App Nap 的方法:Disable app nap in Swift