1

Тема: AHK: Как использовать одну подпрограмму из разных мест?

Если одной подпрограммой пользуются несколько таймеров и горячих клавиш иногда они перебивают друг друга и дают не тот  результат. Как этого избежать?

2

Re: AHK: Как использовать одну подпрограмму из разных мест?

Это особенность программы AutoHotkey. Каждый новый поток прерывает предыдущий. Про потоки и их приоритеты читайте главу  Потоки ("Threads").

3

Re: AHK: Как использовать одну подпрограмму из разных мест?

Если все обращения к подпрограмме равноценны, то остаётся только присвоить им всем Critical, чтобы вообще никогда не прерывались. Так?

4

Re: AHK: Как использовать одну подпрограмму из разных мест?

Если для каждого из таймеров (или горячих клавиш) прописать Critical, то во время обращения одного из них к подпрограмме другие не смогут прервать поток.

5

Re: AHK: Как использовать одну подпрограмму из разных мест?

Foma пишет:

Если одной подпрограммой пользуются несколько таймеров и горячих клавиш иногда они перебивают друг друга и дают не тот  результат. Как этого избежать?

Если

Foma пишет:

несколько таймеров

- это небольшое число, то можно создать отдельно несколько подпрограмм..

AutoHotKey Version: 1.1.09.02
Не спеши, а то успеешь..

6

Re: AHK: Как использовать одну подпрограмму из разных мест?

Вопрос в продолжение темы.
  Как правильно буферизировать 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

7

Re: AHK: Как использовать одну подпрограмму из разных мест?

Если нужно, чтобы ветвь таймера не прерывалась горячей клавишей, пока не дойдёт до конца, лучше воспользоваться командой Critical:

Hotkey,F12,sub1,B
SetTimer, timer1, 20

var := 1

timer1:
   Critical
   ToolTip, %var%
   sleep, 5000
   return

sub1:
   var := 2
   return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Как использовать одну подпрограмму из разных мест?

Если внутри таймера несколько подпрограмм и функций, в каком месте прекращается действие Critical? На первом же return или только на собственном return таймера?