macos - 如何快速根据用户输入运行警报

标签 macos swift background-process alarm

到目前为止,我已经创建了一个循环,它接受用户输入并将其与当前时间进行比较,如果匹配则发出警报。当我运行它时,它以 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/

相关文章:

c++ - 尝试在 OS X 上为 32 位和 64 位编译 GNU 库

python - 监控用户空闲时间

iOS 快速、随机崩溃 String 和 UIButton

swift - AudioUnit GetPropertyInfo 总是返回 -50 作为错误

PHP exec() 作为后台进程(Windows Wampserver 环境)

c# - 向用户界面报告下载进度

angular - 如何运行在后台运行 HTMLElement 的 focus() 方法的 Karma jasmine 测试?

macos - 我可以在 Android Studio 窗口内(或顶部)运行 Android 模拟器吗?

macos - 刷新node.js脚本!

swift - 创建一个用于执行动画的等待队列