【问题标题】:How to quit an AppleScript applet that is currently looping?如何退出当前正在循环的 AppleScript 小程序?
【发布时间】:2021-08-15 05:03:19
【问题描述】:

我已根据 Robert K 的建议对此进行了修改,但它似乎不起作用。我认为这与“延迟60”和“返回30”的双重使用有关。我知道延迟需要在那里,否则它会在 5 分钟内被双重触发。如下所示,它不响应退出命令,所以必须强制退出。

on idle
    set myTime to time of (current date) as string
    repeat until myTime ≥ 75600 -- stop at 9pm local time
        
        set myTimeB to (round ((time of date ((current date) as string)) / 60) rounding down) mod 5 = 0 --every 5 minutes
        if myTimeB then
            say "triggered"
        end if
        
        delay 60 --less than 30 may cause it to get double triggered.
    end repeat
    return 30 -- idle time (every 10 minutes)
end idle

on quit {}
    display dialog "Sure you want to quit?"
    continue quit -- quits the applet
end quit

【问题讨论】:

    标签: loops applescript exit


    【解决方案1】:

    保持打开应用程序的重复循环是空闲处理程序。阅读一些关于保持打开应用程序的 AppleScript 指南,以更好地了解它们是如何工作的。在这种情况下,例如,您应该使用如下代码:

    on idle
        set myTime to time of (current date)
        if myTime ≥ 75600 and myTime < 76201 then
            --do something
        end if
        return 600 -- idle time (every 10 minutes)
    end idle
    
    on quit {}
        display dialog "Sure you want to quit?"
        continue quit -- quits the applet
    end quit
    

    另外,请注意,我比较的是时间间隔而不是 time = 75600。否则,您的条件可能永远无法满足。您不必要求准确的第二次命中,因为我们增加了 600 秒的空闲时间。

    【讨论】:

    • 谢谢。如果它运行 5 分钟循环,我需要将 return 600 设置为 300 之类的更低值吗?
    • 另外,我的脚本设置为从 UTC 0 开始运行 24 小时,每 5 分钟循环一次,所以我认为 myTime 需要保持在 myTime ≥ 75600 时的状态。除非我误解了。
    • 我认为我有问题,因为它没有响应退出。
    • 1) 将我的脚本按原样复制到脚本编辑器中,2) 将 return 600 替换为 return 300 (正如您现在决定每 5 分钟而不是 10 分钟循环一次),3)将其保存为 作为保持打开的应用程序并运行。
    • 注意:替换 if myTime ≥ 75600 and myTime then with if myTime ≥ 75600 and myTime 。
    猜你喜欢
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    相关资源
    最近更新 更多