Тема: AHK: Как использовать одну подпрограмму из разных мест?
Если одной подпрограммой пользуются несколько таймеров и горячих клавиш иногда они перебивают друг друга и дают не тот результат. Как этого избежать?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Если одной подпрограммой пользуются несколько таймеров и горячих клавиш иногда они перебивают друг друга и дают не тот результат. Как этого избежать?
Это особенность программы AutoHotkey. Каждый новый поток прерывает предыдущий. Про потоки и их приоритеты читайте главу Потоки ("Threads").
Если все обращения к подпрограмме равноценны, то остаётся только присвоить им всем Critical, чтобы вообще никогда не прерывались. Так?
Если для каждого из таймеров (или горячих клавиш) прописать Critical, то во время обращения одного из них к подпрограмме другие не смогут прервать поток.
Если одной подпрограммой пользуются несколько таймеров и горячих клавиш иногда они перебивают друг друга и дают не тот результат. Как этого избежать?
Если
несколько таймеров
- это небольшое число, то можно создать отдельно несколько подпрограмм..
Вопрос в продолжение темы.
Как правильно буферизировать hotkey, если у него меньший приоритет, чем у выполняемой подпрограммы?
Вот так работает 1 раз из 20
#MaxThreadsBuffer On
Hotkey,F12,sub1,B
SetTimer, timer1, 20, 1000
timer1:
;SetTimer, timer1, off
var := 7
sleep, 100
sleep, 100
sleep, 100
sleep, 100
sleep, 100
ToolTip, %var%
;SetTimer, timer1, on
return
sub1:
MsgBox, 9
var := 9
returnЕсли нужно, чтобы ветвь таймера не прерывалась горячей клавишей, пока не дойдёт до конца, лучше воспользоваться командой Critical:
Hotkey,F12,sub1,B
SetTimer, timer1, 20
var := 1
timer1:
Critical
ToolTip, %var%
sleep, 5000
return
sub1:
var := 2
returnЕсли внутри таймера несколько подпрограмм и функций, в каком месте прекращается действие Critical? На первом же return или только на собственном return таймера?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться