1

Тема: AHK: про нити - хуки против таймеров

Вопросы про таймеры я начал задавать здесь, но возникли ещё вопросы про это, а там это оффтопик.

Итак вопрос по поводу прерываний:
Есть у меня в скрипте 3 хука: один следит за появлением новых процессов, второй за смертью процессов, а третий за появлением/исчезанием новых дисков.

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

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

То возник главный вопрос:
Если я обработку всех этих событий переложу на таймер, то как он поведёт себя, в случае если пока выполняется его рутина - возникнет какое-то новое событие, которое отловит хук и после которого надо либо дождаться завершения текущей обработки по таймеру, либо отменить её и начать обработку заново? перервёт ли хук рутину таймера?

2

Re: AHK: про нити - хуки против таймеров

Новый поток прерывает старый на время, пока сам выполняется. Потом старый будет продолжен.

3

Re: AHK: про нити - хуки против таймеров

То же и с рутиной таймера? Если я выставил слишком мелкий период между таймерами, последующий будет прерывать предыдущий?

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

4

Re: AHK: про нити - хуки против таймеров

А вы проверьте. Делов-то на 5 минут.

5

Re: AHK: про нити - хуки против таймеров

Проверил, но ничего не понял. Вроде коллизий нет, но не уверен, что они невозможны.

И ещё: таймер останавливается, если открыто контекстное меню у иконки скрипта в трее. Какое-то очень не очевидное поведение и которое, похоже, нельзя побороть.

6

Re: AHK: про нити - хуки против таймеров

Drugoy пишет:

Какое-то очень не очевидное поведение и которое, похоже, нельзя побороть.

Как раз очевидное, SetTimer:

Although timers will operate when the script is suspended, they will not run if the current thread has "Thread NoTimers" in effect or whenever any thread is paused. In addition, they do not operate when the user is navigating through one of the script's menus (such as the tray icon menu or a menu bar).

И ещё:

If a monitored message that is numerically less than 0x312 arrives while the script is absolutely uninterruptible -- such as while a menu is displayed...

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

7

Re: AHK: про нити - хуки против таймеров

Drugoy пишет:

Проверил, но ничего не понял. Вроде коллизий нет, но не уверен, что они невозможны.

Что вы называете коллизиями?

8

Re: AHK: про нити - хуки против таймеров

таймер останавливается, если открыто контекстное меню

Насколько помню, такое ещё происходит при перетаскивании за заголовок GUI скрипта.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

9

Re: AHK: про нити - хуки против таймеров

Что значит слово "нити" в названии темы?

10

Re: AHK: про нити - хуки против таймеров

ypppu пишет:

Что значит слово "нити" в названии темы?

ypppu, по ходу threads - потоки. Иногда их называют - нити.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

11

Re: AHK: про нити - хуки против таймеров

До сих пор не слышал, чтобы потоки называли нитями. Однако, в Wikipedia даже по этому поводу есть примечание.

12

Re: AHK: про нити - хуки против таймеров

Похоже, что коллизии всё-таки возникают.
Скрипт + образец настроек к нему.
Иногда во 2-ой вкладке, где в реальном времени отслеживаются процессы - всё-таки происходят какие-то коллизии и мёртвые скрипты остаются в списке.
А ещё на 1-ой вкладке происходят глюки с иконками, но это уже к производительности/надёжности самого AHK, а не к вопросу про нити.

13 (изменено: serzh82saratov, 2014-10-28 00:21:24)

Re: AHK: про нити - хуки против таймеров

Сегодня тоже обсуждали.

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

Цикл For K, V in Arr сам отсортирует от ранних до последних (это про ключ A_TickCount).

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14

Re: AHK: про нити - хуки против таймеров

Drugoy пишет:

Иногда во 2-ой вкладке, где в реальном времени отслеживаются процессы - всё-таки происходят какие-то коллизии и мёртвые скрипты остаются в списке.
А ещё на 1-ой вкладке происходят глюки с иконками, но это уже к производительности/надёжности самого AHK, а не к вопросу про нити.

Ради интереса написал подобный скрипт, всё работает нормально.

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