2017-09-15 753 views
-1

如何暂停主循环并每隔一分钟按buff键?但主循环autohotkey脚本似乎覆盖了在同时运行的两个计时器脚本?如何让主循环暂停并使计时器的优先级每分钟运行一次?ahk如何在执行计时器时暂停循环?

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

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

目前尚不清楚你的要求。使用您当前的代码,计时器将每分钟运行一次,然后“主”循环将继续运行。 – Oleg

回答

-1

添加Sleep, 10(或100,或任何时间,你觉得你能负担得起)在主回路的某处。这会暂停主循环多毫秒,以允许其他进程获得运行时间。如果代码标记为Critical,这可能尤其重要。

+0

她的问题中没有任何内容表明这是她的问题,即使是空循环,Autohotkey也不会阻止其他进程获得运行时。 – Oleg

0

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