[5] 오토핫키 Autohotkey 완벽분해 강좌 - Sleep

Posted by 아이티프로13
2018. 5. 9. 00:05 프로그래밍/AutohotKey

안녕하세요. 쿠과자입니다.

이전시간에는 오토핫키에서 빠지면 안되는 가장 중요한, Send 구문에 대해서 알아봤습니다.

2018/05/07 - [프로그래밍/AutohotKey] - [4] 오토핫키 Autohotkey 완벽분해 강좌 - 키보드 조작, Send

이번에도 마찬가지로, 매크로에서 빠지면 섭한 Sleep 구문에 대해서 알아보도록 합시다.




Sleep 구문


Sleep 구문은 가장 쉬운 문장입니다.

말 그대로, 오토핫키 프로그램을 일정시간 일시정지 한다는 것이죠.


Sleep, [쉬는 시간] 으로 일반적으로 표현됩니다.

뒤의 단위는 ms로, 1000이 1초입니다.

Sleep, 1000의 경우 (일반적으로) 1초를 뜻하죠.


예문을 하나 봅시다.


F5::

Send,aaa

Sleep,1000

Send,bbb

Return



위와같이, aaa(한글로 ㅁㅁㅁ)이 입력되고

약 1초후에, bbb(한글로 ㅠㅠㅠ)가 입력되는것을 알 수가 있습니다.




Key Down과 연동하기


일반적으로, 키가 씹히는 흔히 "삑사리" 라고 말하는 것이

오토핫키에서는 빈번히 일어날수 있습니다.

이를 방지하기 위해, Key down 구문과 Sleep구문을 같이 쓰는 경우가 있는데요.

아래의 구문을 보시죠.


F5::

Send,{Shift Down}

Send,{a}

Send,{Shift Up}

Return



F6::

Send,{Shift Down}

Sleep,50

Send,{a}

Sleep,50

Send,{Shift Up}

Return


위의 F5의 경우, 중간에 Sleep이 없이 바로 쉬프트->A->쉬프트 떼기로 실행하지만

F6의 경우 중간에 Sleep을 넣어 딜레이를 주는것을 볼 수가 있습니다.


이렇게 함으로써, 쉬프트가 눌러져있는 기간을 길게 함으로써

키가 씹히는것을 방지할수 있습니다.


이는, 윈도우가 렉이 걸렸을때, 즉 사양이 낮은 경우 주로 사용하고

렉이 걸리는 온라인게임(메이플스토리, 바람의나라 등)에서도 자주 쓰이는 방법입니다.


또한, 나중에 알려줄 마우스 클릭도

이를 응용하는 경우 씹힘을 방지할 수 있습니다.




Sleep의 정확한 시간


위에서 눈치가 좋으신 분들은

Sleep, 1000이 "약" 1초라고 적은것을 보실수 있었을겁니다.

왜 정확히 1초를 재지 못하고, 약 1초로 표시한 것일까요?


컴퓨터는 여러분이 아시다시피, 아날로그가 아닌 디지털, 즉 0과 1로 되어있습니다.

그렇기 때문에 이런 지연 시간도, 결국 CPU의 계산에 따라서 흘러간다고 생각하시면 되는데요.


CPU에 일시정지를 걸어놔도, CPU가 다른곳에서 부하(계산)이 일어나는 경우

이 일시정지를 계산하는 시간이 약간씩 길어질 수 있습니다.

크게 부하가 일어나지 않아도, 똑똑한 CPU가

자원을 나눠쓰기 위해 CPU가 프로세스에 각각 시간을 나눠주는 경우가 생기기 때문에(±20ms)

아무리 정확히 할려 해도, 이는 정확히 할 수가 없습니다.


또한, OS에서도 프로세스에 따라서 시간조각(timeslice)를 나눠주기때문에(±20ms)

이에 따라서 딜레이가 조금씩 생기기 마련입니다.


결론적으로, Sleep 구문은 OS에 따라, CPU에 따라, 상황에 따라 조금씩 다르게 측정이 됩니다.


그렇기 때문에, 정확한 시간을 요구하는 프로그램을 작성하실때는

오토핫키가 아닌 다른 언어를 알아보시거나, 컴퓨터 내의 시간을 이용하는 방법(FormatTime 등)을 찾아보셔야 합니다.







지금까지 Sleep 구문에 대해서 알아봤습니다.

사실 Sleep 구문은 별로 어렵지 않은 구문이지만, 아래의 "정확한 시간"파트가 중요하다 생각되어

따로 글을 작성해보았습니다.

아무쪼록, 유익한 시간 되셨길 바라며

포스팅 마치도록 하겠습니다.