1

Тема: AHK: Выход из функции

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

2 (изменено: stealzy, 2017-04-04 20:13:51)

Re: AHK: Выход из функции

Могу предложить рабочий workaround: засовываете вечный цикл внутрь ф-ии.
Вызываете ф-ию в разделе иниц.
Далее пользуемся тем, что в Autohotkey может одновременно исполняться только один цикл:
при срабатывании условия в таймере просто вызываем вашу ф-ию с вечным циклом.
Прежний цикл "заморозится" на время, пока будет выполняться новый. Если внутри цикла используется Break, надо будет это учесть.Также надо будет позаботиться о глобальных/статических переменных.

Другой метод: разносите цикл и проверку по таймеру по двум скриптам, скрипт с циклом на старте запускает скрипт с таймером, и слушает сообщения с помощью OnMessage. При получении определенного сообщения скрипт завершается.
Скрипт с таймером при срабатывании усл. посылает это сообщение скрипту с циклом.

Кстати, если в таймере проверяется активность окна, это можно сделать с помощью хуков.

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

— если у меня ф-ия или цикл не помещается пределах одного экрана, я считаю, что делаю что-то неправильно. Код всегда можно разбить на блоки/ф-ии/абстракции.

3 (изменено: lngvar, 2017-04-05 13:53:16)

Re: AHK: Выход из функции

Спасибо за помощь, но это немного не подходит.
Может быть как вариант, после окончания обработки таймера - перезапуск скрипта с определенным каким то флагом, и обработка его в процессе инициализации нового экземпляра, что бы понять что произошел перезапуск после экстренного срабатывания таймера ?
Такое возможно ? И как это можно было устроить ?

4

Re: AHK: Выход из функции

lngvar
Расставьте заглавные буквы и отсутствующие точки в своих постах. Специально для вас это подчёркнуто в правилах.