Спецификация события (Watch*)

Задачи могут запускаться на выполнение при возникновении условленных событий.

Определяя задачу, вы указываете nnCron за какими именно событиями он должен следить и как только событие произойдет, программа запустит нужную задачу. Одновременно со спецификаторами события вы можете использовать спецификаторы времени и правила, т. е. время и правила запуска тоже будут проверяться перед выполнением действий. (См. также описание опции задачи Also). Спецификатор события должен располагается в начале задачи, до раздела Action:.

Пример:

#( test_watch
\ задача запустится при появлении или изменении файла 'test.sem',
\ если текущее время попадает в интервал между 12:00 и 15:00
\ и вы находитесь в онлайне
Time: * 12-15 * * * *
WatchFile: "c:\test.sem"
Rule: ONLINE?
Action:
    \ ... выполняем работу
)#

В задаче может присутствовать несколько спецификаторов события, которые объединяются между собой с помощью логического "ИЛИ", т. е. действие будет выполнено, если произошло хотя бы одно из указанных событий.

Пример:

#( test_multiple_watch
\ задача запустится при появлении или изменении файла '1.sem'
\ или при появлении окна "Интернет Эксплорера"
\ если текущее время попадает в интервал между 18:00 и 20:00
Time: * 18-20
WatchFile: "c:\1.sem"
WatchWinCreate: "*Internet Explorer"
Action:
    \ ... выполняем работу
)#

Одинаковые события не могут происходить быстрее, чем это установлено параметром MonitorResponseTime: в nncron.ini. Этот параметр задает минимальное время (в миллисекундах) между двумя событиями. По умолчанию его значение равно ста миллисекундам, т. е. одной десятой секунды. При желании, для каждой задачи можно установить свое время отклика. Для этого нужно перед соответствующим словом Watch* изменить значение VALUE-переменной MonitorResponseTime:

<time_in_ms> TO MonitorResponseTime

Переопределение будет действовать на все последующие задачи, поэтому сразу после слова Watch* имеет смысл восстановить значение времени отклика по умолчанию.

Пример:

#( watch_task
MonitorResponseTime        \ сохраняем значение в стеке
1000 TO MonitorResponseTime \ устанавливаем новое (1000 мс)
WatchDir: "c:\xxx\yyy"
TO MonitorResponseTime     \ возвращаем старое значение
Action:
    MSG: "c:\xxx\yyy has been changed"
)#

Вы можете посмотреть список опций задачи в разделе "Ключевые слова nnCron - Отслеживание событий (Watch*)"