2017-09-15 9 views
-1

メインループを一時停止して毎分バフキーを押す方法は?しかし、メインループ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 
関連する問題