매크로

조회 수 8179 추천 2 댓글 15

보통 오토핫키에서 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


이런식의 최종결과를 얻을 수 있게 됩니다



  • 노터스 2016.09.18 01:30

    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

  • my0312 2016.09.18 03:37
    이런게 있는줄은 몰랐네요 좋은 정보 감사합니당 ㅎㅎ
  • 하연데디 2016.10.27 10:49
    이거 도전해보고 있습니다.ㅎㅎ 멀티 쓰레드로 역활 분할해 놓으면 좋을 것 같아서요 ...
  • 선녀는후끈해 2016.10.20 15:39

    또한 Critical, On, Off를 이용하여, 서로의 함수에 방해받지 않게 추가도 가능합니다.

  • 하연데디 2016.10.25 15:47

    아 정말 필요하던 부분이었는데 감사합니다!!!

  • profile
    크농 2016.10.25 20:21

    settimer도 병렬은 아니였군요! ㅎㅎ

    좋은정도 알아갑니다 :)

  • 스웨이스 2016.11.02 11:37

    작성자님 이렇게 병렬로 쓸려고 했는데 실행하면 예 아니오 라는 창이 반복해서 뜨네요. 왜이런건가요..?

  • my0312 2016.11.03 15:44
    아 오토핫키 여러개 실행시키려면 singleinstance 라는 옵션을 비활성화 시켜야하는데 깜빡했네요 오토핫키 헬프에 가셔서 single 키워드로 검색하면 자세히 나올거에요
  • 스웨이스 2016.11.03 16:45
    감사합니다^^
  • 스웨이스 2016.11.05 18:06
    my0312님 run으로 실행시킨 스크립트를 원래 스크립트 종료시킬때 같이 종료하는방법이 있나요??
    다 해결했는데 run스크립트를 종료할려면 따로 키를 지정해야되던데 지정해도 안꺼질때도 있더라구요.
    그리고 키를 지정하면 예/아니오 창이 뜰때도 있구요. 원래 스크립트 종료할때 같이 종료하는 방법은 없을까요??ㅜ
  • my0312 2016.11.09 11:05
    음... 그 부분은 잘모르겠네요 원래 스크립트에서 다른 스크립트를 실행시켰을 때
    다른 스크립트는 return을 만나면 그때그때 loop가 끝나는대로 알아서 종료가 될텐데 이상하네요..
  • 스웨이스 2016.11.09 18:49

    그렇군요. 감사합니다 ㅎㅎ

  • 오토웹 2016.11.19 09:55

    컨트롤타워 스크립트(test.ahk) 내 다음 명령어,라벨 추가

    onexit, exit (스크립트 상단에 추가)

    exit:
    sendMessage, 0x112, 0xF060,,, a.ahk
    sendMessage, 0x112, 0xF060,,, b.ahk
    sendMessage, 0x112, 0xF060,,, c.ahk
    exitapp
    return

  • 좌통닭우치킨 2017.05.07 18:43

    좋은 정보 감사합니다

  • 바남 2018.10.21 00:07

    감사합니다 하나의 스크립트로 셋타이머를 하다보니 겹쳐져서 꼬이는부분이 많았는데 이 방법으로도 해봐야겠네요

    혹시 critical 을 추가하게된다면 

    a.ahk ,b.ahk, c.ahk에 추가해야하나요? 아니면

    test.ahk 에 추가를 해야하나요?


List of Articles
분류 제목 글쓴이 최근변경 추천
정보 [AHK, C#?] PostMessage를 이용해 마우스 드래그 구현... 2 Windhelm 2017.06.26 0/0
정보 OSD정의 및 오토핫키에서의 구현 Allyce 2017.06.08 0/0
정보 perl을 이용한 adb capture 방법 Allyce 2017.06.02 1/0
정보 메이플 아직 뚫리네요 9 천례향 2018.04.20 0/0
정보 X부터Y까지의 모든 값을 랜덤으로 입력해주는 함수 4 sudeky 2016.12.25 0/0
정보 DllCall "mouse_event" 속도조절하는 법 rkfdma 2016.12.08 0/0
정보 녹스창 크기 상관없이 클릭해주는 함수입니다. 2 크농 2016.10.25 0/0
정보 adb를 이용한 연속 터치 및 키입력 TIP 7 하연데디 2019.03.05 1/0
정보 여러개의 루프문 병렬로 동시에 돌리기 15 my0312 2018.10.21 2/0
정보 프로그램 간이 비밀번호 임시 1 T7GG 2016.09.10 0/0
정보 간단한 익스플로러 버전 체크 스크립트 1 노터스 2016.09.09 0/0
정보 소개 : CJon class 1 와이로 2016.06.26 2/0
정보 구이 디자인재활용 팁 3 이무 2017.02.13 0/0
정보 마지막으로 작업했던 오토핫키 공유(4) -끝- 2 Vesper 2016.06.11 1/0
정보 마지막으로 작업했던 오토핫키 공유(3) 1 Vesper 2016.06.10 1/0
정보 마지막으로 작업했던 오토핫키 공유(2) 2 Vesper 2016.11.03 1/0
정보 마지막으로 작업했던 오토핫키 공유(1) 6 Vesper 2017.05.29 1/0
정보 MsgBox 설정 3 괴리사 2016.06.08 2/0
정보 좌표개념 이해하기... 참고 그림.. 6 제발등업좀2 2016.05.26 1/0
정보 외치기님 푸쉬블렛 .. 시간 보내기 (누군가 질문던지신... 2 제발등업좀2 2016.03.30 1/0
Board Pagination Prev 1 23456 7 Next
/ 7

전체 최신 인기글

전체 주간 인기글