Autohotkey 带计时器的多个循环

Autohotkey 带计时器的多个循环,autohotkey,Autohotkey,所以我不熟悉自动热键,我对多循环定时器有一些问题,它和第一个一样好,但在第二个循环前进时,时间与我想要的不匹配 所以基本上我希望循环运行5分钟,循环2应该是7秒后的第一个循环,然后2秒后,我希望循环1在循环1中调用,两次按压之间有1.2秒的延迟,第一次它正常工作,但是时间开始改变,一切都变得一团糟 F1:: If (loopOne = True) { SetTimer loopTwo, Off TwoSwitch := False SetTimer loopOne,

所以我不熟悉自动热键,我对多循环定时器有一些问题,它和第一个一样好,但在第二个循环前进时,时间与我想要的不匹配

所以基本上我希望循环运行5分钟,循环2应该是7秒后的第一个循环,然后2秒后,我希望循环1在循环1中调用,两次按压之间有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

我想这就是你想做的。假设我正确理解了你的意思,我认为不需要两个计时器

由于它是首选的更快、更可靠的发送模式,因此也放弃了传统标签,转而使用它。
除了使用
toggle:=]切换之外,应该是一个非常简单的脚本!切换
。如果你不明白,你可以看到我的一个老答案,其中有一点关于它。
还要注意在计时器中使用负周期,这是一件非常有用的事情

F1::
    if (toggle:=!toggle)
    {
        SetTimer, MyCoolLoop, 7000 ;7sec period
        SetTimer, StopLooping, -300000 ;negative period, run ONCE after 5mins
    }
    else
        SetTimer, MyCoolLoop, Off
return

MyCoolLoop()
{
    ;number 2 gets sent (every 7secs)
    ;2secs after this, number 1 gets sent
    ;1.2secs after this, number 1 gets sent again
    ;3.8secs after this, we start from the beginning
    SendInput, 2
    Sleep, 2000
    SendInput, 1
    Sleep, 1200
    SendInput, 1
}

StopLooping()
{
    SetTimer, MyCoolLoop, Off
}

需要明确的是,您是说代码的逻辑按预期运行,但您在正确运行循环的计时方面遇到了问题吗?是的,当它第一次在7s中完全运行loopTwo>9s中运行loopOne时(loopTwo之后2秒),然后太多的循环会变得奇怪,开始得太早并且混淆了,我想要的是7s>9s(在第一次之后2s)>7s>9s,就像是重复x次,在这种情况下是5次,你想让loopOne总是在loopTwo之后激活2s吗?此外,供参考,第一个循环运行1200*300=360000 ms=6分钟,而第二个循环运行2000*300=600000 ms=10分钟。如果你想让我解释为什么,lmk,这与脚本休眠时计数器不能增加有关是的,我想要的是,因此休眠是一个问题如果你的预期结果是让两个循环运行五分钟,那么是的。过去,当我遇到这样的问题时,我只会在主功能(即loopOne和loopTwo)中使用setTimer函数,以触发另一个功能(如flipOne和flipTwo),使主功能在正确的时间后返回。(因为setTimer函数不像Sleep那样暂停程序)我想这是我的问题,谢谢你的解释,我有个问题tho tho,3.8秒来完成7如果我想发送Nogging,我只需要睡3.8秒,对吗?如果我想达到10秒,比如说,我只需要提高6.8秒的睡眠时间,对吗?我不确定我是否理解你的意思,但听起来是错的。你不应该再增加额外的睡眠时间。我将尝试更好地解释,我想运行该循环5分钟,然后停止该部分,现在可以了,我需要每7秒运行一次MyColloop,现在它运行3.2秒,从一开始就开始。我想我应该做的是改变这种方式,也许
SetTimer,MyColloop,7000
和上次发送输入后添加睡眠,3800和我错了?您不需要添加任何额外的睡眠。myColloop()中的代码每7秒执行一次。你加上去的任何睡眠都没有用。我提到的3.8秒只意味着在2000+1200毫秒过去之后,在代码再次执行之前的7秒时间内还有3800毫秒。我明白我认为这是在思考我正在下降的逻辑中,也许我没有解释我想要归档的内容,但这很接近