매크로

조회 수 8216 추천 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
분류 제목 글쓴이 최근변경 추천
공유 오버워치 오토핫키 오토에임입니다 13 오토에임 2022.10.02 2/0
정보 여러개의 루프문 병렬로 동시에 돌리기 15 my0312 2018.10.21 2/0
정보 소개 : CJon class 1 와이로 2016.06.26 2/0
정보 MsgBox 설정 3 괴리사 2016.06.08 2/0
자유 Gdip 지정된 좌표 사각형으로 캡쳐하기! 8 셋쇼마루 2016.10.29 2/0
자유 비활성이미지서치 + 클릭 7 셋쇼마루 2017.01.17 2/0
자유 오토핫키 OpenGL 라이브러리 4 암드래 2016.01.12 2/0
정보 저번에 올려드린 홈페이지보다 더 유용한 사이트 5 침묵의고요 2018.02.07 2/0
정보 [Lib] Class MsgBox, 메시지박스 확장 4 예지력1 2015.11.27 2/0
정보 [라이브러리] EasyINI 네이티브 ini 3 예지력1 2016.02.09 2/0
자유 옛날에 제작한 메이플 매크로 스크립트 8 암드래 2019.02.13 2/0
질문 고유의 컴퓨터 ID 뭐가있을까요? 6 _Crash 2019.11.26 2/0
질문 다른프로그램의 listview 읽는법 1 _Crash 2015.07.31 2/0
질문 settimer 를 돌릴껀데 진행에 방해받지않게 돌릴수있을... 4 _Crash 2015.07.18 2/0
자유 Function(함수)의 이해 5 리체 2015.07.28 2/0
질문 구이 좌표 따는법 1 _Crash 2015.06.21 2/0
자유 세나 매크로 머리가 멍청한건지 어려운건지 15 스파크 2016.11.20 2/0
정보 노트북사용자(윈도우8) 해상도 문제 해결 팁입니다 6 순수kay 2015.03.13 2/0
정보 개발자분들 다들 Scite4AutoHotkey 사용하고계시죠? 23 예지력1 2015.06.26 2/0
자유 혹시 여기 계시는 분들중에 티스토리 초대장 필요하신... 13 외치기 2015.02.21 2/0
Board Pagination Prev 1 2345678910 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글