Перейти на главную страничку сайта (список статей, файлы для скачивания)

ФОРУМ (здесь можно обсудить эту статью, а также саму программу AutoHotkey и проблемы её использования)

Проект перевода документации AutoHotkey: перечень переведённых статей и статей в работе.

Оригинал статьи в AutoHotkey.chm: "#MaxThreadsBuffer", в содержании - "#Directives" - "#MaxThreadsBuffer", v1.0.47.06.

Ник переводчика: YMP.

Настоящее имя переводчика: Юрий Попов.

#MaxThreadsBuffer

Заставляет некоторые или все горячие клавиши буферизовать, а не игнорировать свои нажатия, когда достигнут лимит по количеству потоков (см. #MaxThreadsPerHotkey).

#MaxThreadsBuffer On|Off

Параметры

On: Все процедуры горячих клавиш между этим местом и следующей директивой #MaxThreadsBuffer Off будут буферизовать, а не игнорировать нажатия своих клавиш в случае, если количество их потоков достигнет лимита, устанавливаемого через #MaxThreadsPerHotkey.
Off: Это значение по умолчанию. Нажатия горячей клавиши будут игнорироваться, если уже запущено максимально разрешённое для неё количество потоков (обычно 1, но это может быть изменено через #MaxThreadsPerHotkey).

Примечания

Это редко используемая директива, потому что от данного типа буферизации, который по умолчанию отключен, обычно больше вреда, чем пользы. Например, если вы случайно нажмёте горячую клавишу дважды, то при включенной буферизации это приведёт к автоматическому запуску её процедуры во второй раз, если выполнение первого потока займёт менее 1 секунды (этот тип буфера существует только 1 секунду). Обратите внимание, что AutoHotkey имеет несколько других способов буферизации горячих клавиш (таких как "Thread Interrupt" и "Critical").

Эта директива полезна главным образом для улучшения реакции горячих клавиш на автоповтор клавиатуры. Например, если вы удерживаете нажатой горячую клавишу, которая имеет настройку #MaxThreadsPerHotkey 1 (значение по умолчанию), поступающие с клавиатуры нажатия игнорируются, если процедура этой горячей клавиши уже выполняется. Таким образом, когда процедура завершится, она не запустится снова пока не поступит следующее нажатие, что может занять 50 миллисекунд или больше, смотря по тому, в каком месте цикла автоповтора завершилась процедура. Этой задержки и помогает избежать данная директива.

Поскольку это директива, а не команда, нет необходимости помещать её внутрь процедуры. Вместо этого располагайте её в скрипте непосредственно перед первой из тех горячих клавиш, на которые она должна действовать.

Пример

#MaxThreadsBuffer on
#x::MsgBox, Эта горячая клавиша будет использовать буферизацию.
#y::MsgBox, И эта тоже.
#MaxThreadsBuffer off
#z::MsgBox, А эта нет.

Перейти на главную страничку сайта (список статей, файлы для скачивания)

© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.