【发布时间】:2020-10-25 23:48:46
【问题描述】:
所以我是 AutoHotkey 的新手,我在 Multiloop timer 方面遇到了一些问题,它像第一个一样工作正常,但在第二个循环中,时间与我想要的不匹配。
所以基本上我希望循环运行 5 分钟 loopTwo 应该是 7 秒后的第一个,然后 2 秒后我希望在 loopOne 中调用 loopOne 我在按下之间有 1.2 秒的延迟,第一次工作正常,但随后时代开始转变,一切都变得一团糟
F1::
If (loopOne = True)
{
SetTimer loopTwo, Off
TwoSwitch := False
SetTimer loopOne, Off
OneSwitch := False
} else {
TheTwoTime := 0
SetTimer loopTwo, 7000 ;run every 7s
TwoSwitch := True
TheOneTime := 0
SetTimer loopOne, 9000 ;run every 9s
OneSwitch := True
}
return
loopOne:
Send, 1
Sleep, 1200
Send, 1
TheOneTime ++
If TheOneTime >= 300 ;run for 5 minutes
{
SetTimer loopOne, Off
OneSwitch := False
}
return
loopTwo:
Send, 2
Sleep, 2000
TheTwoTime ++
If TheOneTime >= 300 ;run for 5 minutes
{
SetTimer loopTwo, Off
TwoSwitch := False
}
return
【问题讨论】:
-
澄清一下,您是说您的代码逻辑按预期运行,但是您在让循环的时间正确运行时遇到问题?
-
是的,它第一次完全运行 loopTwo in 7s > loopOne in 9s (2s after the loopTwo) ,然后太循环变得奇怪开始来得太早并且混淆了,我想要的是7 秒 > 9 秒(第一次后 2 秒)> 7 秒 > 9 秒,就像重复 x 时间在这种情况下为 5 分钟
-
所以你想让loopOne总是在loopTwo之后激活2s?另外,仅供参考,第一个循环运行 1200*300=360,000 毫秒 = 6 分钟,而第二个循环运行 2000*300= 600000 毫秒 = 10 分钟。如果你想让我解释为什么,lmk,这与脚本休眠时计数器无法递增的事实有关
-
是的,这就是我想要的所以那里的睡眠是个问题
-
如果您的预期结果是让两个循环都运行五分钟,那么可以。过去,当我遇到这样的问题时,我只会在主函数(即 loopOne 和 loopTwo)中使用 setTimer 函数来触发另一个函数(如 FlipOne 和 FlipTwo),从而导致主函数在正确的时间后返回。 (因为 setTimer 函数不会像 Sleep 那样停止程序)
标签: autohotkey