보통 오토핫키에서 2가지 이상의 명령을 동시에 처리하기 위해서 SetTimer를 사용합니다 예를 들면...
----------------------------------------------------------------------
F1::
SetTimer, sendafunc, 10
SetTimer, sendbfunc, 10
SetTimer, sendcfunc, 10
Esc::
ExitApp
return
sendafunc:
Send, {a}
return
sendbfunc:
Send, {b}
return
sendcfunc:
Send, {c}
return
----------------------------------------------------------------------
이렇게 코드를 짜고 메모장을 킨 다음 F1 키를 누르면 10ms 간격으로 a,b,c가 거의 동시에 입력되면서
메모장에 abcabcabcabc 이런식으로 계속 출력이 되게 됩니다
하지만 타이머가 걸려있는 각각의 라벨에 Loop가 들어있으면 어떻게 될까요? 예를들어...
----------------------------------------------------------------------
F1::
SetTimer, sendafunc, 100
SetTimer, sendbfunc, 100
SetTimer, sendcfunc, 100
Esc::
ExitApp
return
sendafunc:
Loop, 10
{
Send, {a}
Sleep, 10
}
SetTimer, sendafunc, off
return
sendbfunc:
Loop, 10
{
Send, {b}
Sleep, 10
}
SetTimer, sendbfunc, off
return
sendcfunc:
Loop, 10
{
Send, {c}
Sleep, 10
}
SetTimer, sendcfunc, off
return
----------------------------------------------------------------------
이런식으로 코드를 짜고 메모장을 킨 다음 F1키를 누르면 앞에서 돌아가던 루프문에 다음 루프문이 끼어들게 되면서
다음과 같이 출력이 됩니다
abccccccccccbbbbbbbbbaaaaaaaaa
결국 뒤쪽 루프문부터 순서대로 실행되는것과 비슷한 결과를 얻게되죠
그렇다면 각 루프문이 동시에 실행되도록 하려면 어떻게해야할까요
방법은 각 루프문을 별도의 스크립트로 만든다음 이를 다른 스크립트에서 동시에 실행시켜주면 됩니다
예를들면 우선 test.ahk / a.ahk / b.ahk / c.ahk 이렇게 4개의 스크립트를 따로 만든다음 한 폴더에 두고
각각의 스크립트엔 다음과 같이 코드를 입력해줍니다
test.ahk---------------------------------------------------------------
F1::
Run, a.ahk
Run, b.ahk
Run, c.ahk
return
test.ahk---------------------------------------------------------------
a.ahk-----------------------------------------------------------------
Loop, 10
{
Send, {a}
Sleep, 10
}
return
a.ahk-----------------------------------------------------------------
b.ahk-----------------------------------------------------------------
Loop, 10
{
Send, {b}
Sleep, 10
}
return
b.ahk-----------------------------------------------------------------
c.ahk-----------------------------------------------------------------
Loop, 10
{
Send, {c}
Sleep, 10
}
return
c.ahk-----------------------------------------------------------------
그다음 test.ahk를 실행시키고 F1 키를 눌러보면 각 루프문이 거의 동시에 돌아가면서
abcbacbcabcacababcabccabcbabac
이런식의 최종결과를 얻을 수 있게 됩니다
AHK_H를 이용하면, Multi-thread 작업이 가능 하다고 하더군요.
AHK_H DLL로 스크립트 작성한뒤, 각각 한 스크립트 안에서 불러오고, 프로세서/코어에서 개별 작업이 가능 하다고.... 한걸 어디서 본거 같습니다 ㅎ
https://autohotkey.com/board/topic/75865-ahkdll-multi-threading-basic-examples/
https://hotkeyit.github.io/v2/docs/AutoHotkeyDll.htm