F1::
sleep,1000
return
F2::
msgbox,afdsasd
return
1. sleep은 스크립트를 멈추는데 멈추는 시간 동안에 핫키를 누르면 명령이 실행돼요
스크립트가 멈추면 핫키를 눌러도 반응이 없어야 하는거 아닌가요??
sleep에 대해 자세히 모르겠습니다 ㅠ
F1:: ;첫번째 예시
formattime,time,,m
loop
{
if time = 0
{
exitapp
}
msgbox,asdf
sleep,1000
}
return
F2:: ;두번째 예시
formattime,time,,m
loop
{
msgbox,asdf
}
return
F3:: ;실시간으로 검사
loop
{
if time = 0
{
exitapp
}
}
return
2. F3처럼 반복문으로 계속 검사해서 조건이 만족되면 프로그램을 종료하게 하려는데
반복문1 이 실행될 때 핫키로 다른 반복문2 를 누르면 반복문 1이 종료되고 반복문 2가 실행돼요
반복문 두개가 같이 실행되는 방법은 없나요?
부족한 지식을 공유하는 입장이어서 답변에 망설였는데 공부하는 입장에서 프날님의 추가 답변으로 피드백도 받고 싶은 마음으로 답변드립니다.
1, 2번 답변이 비슷한데 우선 해당하는 내용의 개념은 '멀티스레드'이고, 관련 내용을 검색해보시면 도움이 될 것 같습니다.
오토핫키 프로그램에서 동시성은 동시에 실행하는것처럼 보이지만 우선순위에 따라서 진행한다고 생각하시면 될 것 같고,
핫키의 경우 개념적으로 맞는지 모르겠지만 핫키를 입력받으면 기존입력을 무시하고 핫키의 아랫줄부터 코드가 실행하게끔 되어있는 것 같습니다.
Sleep, 의 경우 ms단위를 갖는 대기시간으로 보시면 될 것 같고, 프로그램이 Sleep, 이라는 행동을 하는 것이고, 멈추는 것과는 다른 것 같습니다.
Loop, 2개를 동시에 동작시키는 기능은 대표적으로 SetTimer를 많이 사용합니다. SetTimer는 지정된 시간마다 해당라벨을 시행하고,
이를 반복적으로 시행하기 때문에 라벨 내부에는 필요한 내용만 입력하시면 됩니다.
a = 0인 3초동안은 시간체크를 해도 b가 안더해졌지만 a = 1인 순간부터 5초동안은 b에 1씩 더해져서 MsgBox, 는 5를 출력합니다.
예제코드가 적절하지는 않은 것 같은데, 이해가 되셨으면 좋겠네요.
차랑님 말씀이 맞습니다... ^^
근본적으로 오토핫키는 한 번에 한 줄만을 실행시킬 수 있습니다.
이는 모든 프로그래밍 언어가 그렇지만, 이들 대부분은 이러한 문제를 해결하기 위해 '멀티스레드'개념을 가지고 있습니다.
즉, 프로그램 두 개를 하나로 묶어서 돌린다고 생각하시면 됩니다. (많이 틀린 설명이긴 하지만요.) 그러면 두 프로그램은 독립적으로 각각의 줄을 실행시킬 수 있습니다.
오토핫키는 멀티스레드를 지원하지 않습니다. 새 서브루틴이 실행되면 우선순위에 의해 동작 여부가 결정되는데, 우선 순위가 같다면(예를 들어서 핫키 서브루틴 작동 중 다른 핫키를 눌렀을 경우) 새로운 서브루틴이 기존 진행하던 서브루틴을 새치기(interrupt)하게 됩니다. 즉, 새로 입력된 서브루틴이 우선 실행됩니다.
이는 오류나 별 다른게 아닌, 오토핫키에서 "두 개의 부분을 동시에 진행해야하는데, 그럴 순 없으므로 새치기(interrupt) 방식으로 동작하게 하자!" 라고 정해둔 것이기 때문에 큰 의문을 안가지셔도 될 듯 합니다.
와우 여태까지 의문이였던걸 해결했네요
두분 다 감사드립니다
댓글 달기