Autohotkey ahk如何在执行计时器时暂停循环?

Autohotkey ahk如何在执行计时器时暂停循环?,autohotkey,Autohotkey,如何暂停主循环并每分钟按buff键?但是主循环自动热键脚本似乎覆盖了同时运行的计时器脚本?如何使主循环暂停并使计时器优先于每分钟运行按键 home:: SetTimer, skillbuffs, 60000 ;1min loop { ;attack loop and pick items main script } skillbuffs: send{f5} ;press self skill every1min SetTimer, skillbuffs, On return 在主循环的

如何暂停主循环并每分钟按buff键?但是主循环自动热键脚本似乎覆盖了同时运行的计时器脚本?如何使主循环暂停并使计时器优先于每分钟运行按键

home::
SetTimer, skillbuffs,  60000 ;1min
loop
{
;attack loop and pick items main script
}

skillbuffs:
send{f5} ;press self skill  every1min
SetTimer, skillbuffs,  On
return

在主循环的某个地方添加一个
睡眠,10个
(或100个,或任何你认为可以承受的时间)。这将使主循环暂停多少毫秒,从而允许其他进程获得运行时间。如果代码被标记为
严重
,这一点可能特别重要

SetTimer
与脚本的其余部分并行运行其任务,这就是为什么您没有看到循环等待的原因

您可以将循环包含在计时器中,这将强制计时器在完成其任务之前等待循环中断,如以下代码:

DoTheLoop()
{
StartTime := A_TickCount ; Set current tick time (uptime of PC) to compare against.
loop
{
    ElapsedTime := A_TickCount - StartTime ; Difference between start of loop and now.
    SendInput, %ElapsedTime%{Enter}
    Sleep, 1000
    if ( ElapsedTime >= 10000 ) ; 10.0 sec.
    {
        break
    }
}}

Home::
SetTimer, skillbuffs

skillbuffs:
DoTheLoop()
SendInput, Skillbuffs timer has fired.{Enter}
SetTimer, skillbuffs,  On
return
但这充其量只是一个模糊的问题,因此不是100%可靠的。除此之外,如果你有明确定义的任务和时间框架,那么你似乎在过度设计问题

相反,我建议简化:

MainLoop()
{
StartTime := A_TickCount ; Set current tick time (uptime of PC) to compare against.
loop
{
    ElapsedTime := A_TickCount - StartTime ; Difference between start of loop and now.

    ; Do stuff in the loop.

    if ( ElapsedTime >= 60000 ) ; 60.0 sec.
    {
        SendInput, {F5} ; Press self skill every 60 sec.
        StartTime := A_TickCount ; Reset StartTime variable.
    }
}}

Home::
MainLoop()
return

不清楚你在问什么。使用您当前的代码,计时器将每分钟运行一次,然后“主”循环将继续运行。她的问题中没有任何内容表明这是她的问题,即使使用空循环自动热键,也不会阻止其他进程“获取运行时”。