2014-12-12 3 views
1

나는 내가 반복적으로 매우 빠르게 누르는 단축키를 가지고있다. 그리고 나는 약간을 조절하기 위해 루틴에 Sleep을 포함시켰다. 그러나 더 빠른 속도로 갈 때 출력이 엉망이되기 시작합니다. 범인은 분명히 수면입니다. 왜냐하면 내가 가지고 나가서 그것을 원하는만큼 빠르게 내버려두면 출력이 좋기 때문입니다. 나는 대기 중일 때 Sleep이 새로운 프로세스가 시작되도록 허용하고 있으며, 따라서 같은 핫키의 모든 새로운 프로세스가 서로 충돌하는 것이 오류의 원인이라고 생각하고 있습니다. 그래서 기다리는 동안 새 프로세스를 차단하는 수면 기능의 변형이 있는지 궁금합니다. 나는 워드 프로세서 나 구글에서 그런 것을 찾을 수 없었다."수면"의 차단 버전이 있습니까?

+3

코드를 제공하지 않은 이유는 무엇입니까? – MCL

답변

1

C++에서는이 경우 뮤텍스를 사용합니다. AHK에서는이를 해결해야하고 여러 가지 방법이 있습니다.
핫키가 작동하는 동안 단축키를 비활성화하는 것이 한 가지 방법입니다. 이를 위해 간단한 변수를 사용할 수 있습니다.
예 : mutex_locked라는 변수가 false로 설정되어있는 동안

#If !mutex_locked 
F2:: 
    mutex_locked := True 
    Send, letters incomming... 
    Sleep, 500 
    Send, abcdefghijklmnopqrstuvwxyz 
    mutex_locked := False 
Return 
F3:: 
    mutex_locked := True 
    Send, numbers incomming... 
    Sleep, 500 
    Send, 1234567890 
    mutex_locked := False 
Return 
#If 

는 핫키를 사용할 수 없습니다. 변수가 끝나면 변수를 다시 true로 설정합니다.

0

위의 Forivin의 코드/대답이 마음에 들지만 아래 내용도 적합하다고 생각합니다. AHK 기준에서

는 :

(https://autohotkey.com/docs/misc/Threads.htm)

"이미 실행중인 경우 기본적으로는, 지정된 단축키 또는 hotstring 서브 루틴은 두 번 실행할 수 없습니다 사용 #MaxThreadsPerHotkey이 동작을 변경할 수 있습니다.."

#MaxThreadsPerHotkey에 대한 정보는 다음 위치에 있습니다

(https://autohotkey.com/docs/commands/_MaxThreadsPerHotkey.htm)

는 아마도 같은 단축키가 문제를 우회 할 것이다 (#MaxThreadsPerHotkey을 증가시켜) 다른 스레드에서 자체와 동시에 실행할 수? 추측 컨데 ...이 개념을 확인하거나 수정하십시오.