AutoHotkey:多个循环,相同的定时器,异步

时间:2018-01-13 02:29:17

标签: loops asynchronous timer autohotkey

我正在尝试为游戏制作一个Keybind。基本上它所做的就是将1和2保持1000ms,然后停止1200ms,然后重复。 Numpad0切换它。

但是,我希望它是异步的。所以我尝试在计时器之间添加一个睡眠。但它只能工作一次,然后开始同时执行两个循环。

我希望有人可以提供帮助! :)

Numpad0::
autofire := !autofire

if autofire
{
SetTimer, gun1, 1200
sleep 600
SetTimer, gun2, 1200
}
else
{
settimer, gun1, off
settimer, gun2, off
}
Return

gun1:
sendinput {1 down}
sleep 1000
sendinput {1 up}
return

gun2:
sendinput {2 down}
sleep 1000
sendinput {2 up}
return

1 个答案:

答案 0 :(得分:0)

每个计时器中的睡眠语句阻止另一个计时器按计划启动。

Autohotkey Threads的文档:

  

虽然AutoHotkey实际上并不使用多个线程,但它   模拟一些行为:如果第二个线程启动 - 这样   通过在前一个仍在运行时按另一个热键 -   当前线程将被中断(暂时停止)以允许   新线程成为当前的。如果第三个线程启动的话   第二个仍在运行,第二个和第一个将在一个   休眠状态,等等。

这是您的代码,其他计时器取代了睡眠:

Numpad0::
  autofire := !autofire

  if (autofire)
    SetTimer gun1down, -1200
  else
  {
    SetTimer gun1down, off
    SetTimer gun1up, off
    SetTimer gun2down, off
    SetTimer gun2up, off
  }
  return

gun1down:
  sendinput {1 down}
  SetTimer gun2up, -400
  return
gun1up:
  sendinput {1 up}
  SetTimer gun1down, -200
  return
gun2down:
  sendinput {2 down}
  SetTimer gun1up, -400
  return
gun2up:
  sendinput {2 up}
  SetTimer gun2down, -200
  return
相关问题