如何在Hammerspoon初始化中实现周期性任务?

问题描述 投票:0回答:1

我想如果我的网络连接中断或恢复时能得到通知就更好了,所以我把它放在了Hammerspoon的init.lua中。

ping = nil
previousStatus = nil
function pingCallback(server, eventType, ...)
  hs.alert.show(eventType)

  if eventType == "receivedPacket" 
  then
    newStatus = "success"
  else
    if eventType == "didFail" or eventType == "sendPacketFailed" 
    then
      newStatus = "failure"
    end
  end

  if not (newStatus == previousStatus)
  then
    hs.alert.show(string.format("Network status changed to %s", newStatus))
    previousStatus = newStatus
  end
end

while(true)
do
  ping = hs.network.ping.ping("google.com", 5, 1.0, 2.0, "any", pingCallback)
  os.execute("sleep 15")
end

问题出在睡眠上 它让Hammerspoon自己睡觉,使它挂起。我真正需要的是一个线程或计时器,或者启动一个不同的操作系统进程。我应该怎么做?

multithreading timer lua sleep hammerspoon
1个回答
1
投票

Hammerspoon有 定时器. 你可以更换你的 while 循环,如。

function pingGoogle()
  hs.network.ping.ping("google.com", 5, 1.0, 2.0, "any", pingCallback)
end

googlePinger = hs.timer.new(15, pingGoogle)
googlePinger:start()

一些其他的事情要考虑。

  • 循环的基础上开始停止ping定时器 网络覆盖率. 如果到ping目标的路由不存在,就不需要用ping进行轮询。
  • HTTP GET 到大厂商用于自己网络连接检查的终端。
    • 谷歌。http://clients3.google.com/generate_204 - 应该有一个204的响应代码(我看到使用这个的检查器也会检查响应内容长度为0)。
    • 微软:应该有200的响应。http://www.msftncsi.com/ncsi.txt - 应该有一个200的响应,响应体应该是 Microsoft NCSI.
© www.soinside.com 2019 - 2024. All rights reserved.