到目前为止,我已经创建了一个循环,它接受用户输入并将其与当前时间进行比较,如果匹配则发出警报。当我运行它时,它以 99% 的 CPU 使用率运行,使我的计算机几乎无法使用。我正在寻找一种以低得多的优先级或更好的优先级运行它的方法,这是循环的替代方法。我看到的所有其他答案要么没有解决用户通过文本输入的问题,要么不是很快的。非常感谢任何帮助,下面是比较两个时间的函数,alarmHour 和 alarmMinute 变量是用户输入的变量。
func runTimer() {
var rightTime:Bool
do {
let date = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute, fromDate: date)
let hour = String(components.hour)
let minutes = String(components.minute)
if (hour == globe.alarmHour && minutes == globe.alarmMinutes){
rightTime = true
} else {
rightTime = false
}
} while (rightTime == false)
if (rightTime == true) {
prepareAudio()
AlarmSound.play()
}
}
最佳答案
呃。由于您概述的原因,您的 do/while 循环实际上是一种非常糟糕的方法。
在大多数情况下,NSTimer 是最佳选择。查看“scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:”方法。
您创建一个计时器并安排它,它会在所需时间调用您的选择器。
NSTimers 并不完全准确。它们可以关闭大约 50 毫秒,但向用户显示警报没问题。
关于macos - 如何快速根据用户输入运行警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31516506/