나는 내가 반복적으로 매우 빠르게 누르는 단축키를 가지고있다. 그리고 나는 약간을 조절하기 위해 루틴에 Sleep
을 포함시켰다. 그러나 더 빠른 속도로 갈 때 출력이 엉망이되기 시작합니다. 범인은 분명히 수면입니다. 왜냐하면 내가 가지고 나가서 그것을 원하는만큼 빠르게 내버려두면 출력이 좋기 때문입니다. 나는 대기 중일 때 Sleep
이 새로운 프로세스가 시작되도록 허용하고 있으며, 따라서 같은 핫키의 모든 새로운 프로세스가 서로 충돌하는 것이 오류의 원인이라고 생각하고 있습니다. 그래서 기다리는 동안 새 프로세스를 차단하는 수면 기능의 변형이 있는지 궁금합니다. 나는 워드 프로세서 나 구글에서 그런 것을 찾을 수 없었다."수면"의 차단 버전이 있습니까?
1
A
답변
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을 증가시켜) 다른 스레드에서 자체와 동시에 실행할 수? 추측 컨데 ...이 개념을 확인하거나 수정하십시오.
코드를 제공하지 않은 이유는 무엇입니까? – MCL