Есть ли блокирующая версия "Сон"? (АХК)

У меня есть горячая клавиша, которую я нажимаю многократно довольно быстро, и я включил Sleep в рутину, чтобы немного уменьшить ее. Но когда я иду на более высоких скоростях, выход начинает испортиться. Преступник - это, безусловно, сон, потому что, когда я вынимаю его и отпускаю так быстро, как он хочет, выход прекрасен. Я знаю, что " Sleep позволяет запускать новые процессы во время ожидания, и поэтому я думаю, что все эти новые процессы одной и той же горячей клавиши, которые происходят друг над другом, являются причиной ошибок. Поэтому мне интересно, есть ли вариация функции сна, которая блокирует новые процессы во время ожидания? Я не мог найти ничего подобного в документах или Google.

2 ответа

В C++ вы должны использовать мьютексы в этом случае. В AHK вам нужно обойти это, и есть несколько способов сделать это. Один из способов - отключить горячие клавиши, в то время как любая горячая клавиша выполняет действие. Для этого вы можете использовать простую переменную. Пример:

#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

Хотя для переменной с именем mutex_locked установлено значение false, горячие клавиши отключены. Как только они закончатся, они снова вернут переменную.


Мне нравится код Forivin/ответ выше, но я думаю, что это также актуально.

Из справки AHK: (https://autohotkey.com/docs/misc/Threads.htm)

"По умолчанию, данная горячая клавиша или подпрограмма hotstring не могут быть запущены во второй раз, если она уже запущена. Используйте #MaxThreadsPerHotkey, чтобы изменить это поведение".

Информация о #MaxThreadsPerHotkey находится по адресу: (https://autohotkey.com/docs/commands/_MaxThreadsPerHotkey.htm)

Возможно, что одна и та же горячая клавиша будет запускаться одновременно с собой в разных потоках (путем увеличения #MaxThreadsPerHotkey) обойти проблему? Просто догадайтесь... не стесняйтесь подтвердить или исправить это понятие.

licensed under cc by-sa 3.0 with attribution.