Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Таймер или скрипт "Прошла секунда"?  (Прочитано 1238 раз)

pan2000

  • Постоялец
  • ***
  • Сообщений: 170
    • Просмотр профиля
Таймер или скрипт "Прошла секунда"?
« : 16 Августа 2019, 23:15:57 »
И таймер, и скрипт могут использоваться для измерения временных интервалов в единицах "секунда". Таймер предполагает изменение связанной с ним переменной с момента запуска таймера через одну секунду. Скрипт предполагает изменение по сетке, привязанной ко времени ПК.
Предлагаемый проект строит распределение моментов наступления события относительно текущего времени (NOW) для каждого из процессов.
Контролируется монотонность изменения секунд сравнением предыдущего и текущего значения, которые должны отличатся на 1 при сравнении по модулю 60.


« Изменён: 17 Августа 2019, 05:51:59 от pan2000 »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Таймер или скрипт "Прошла секунда"?
« Ответ #1 : 17 Августа 2019, 09:56:45 »
Здравствуйте.

Таймер или скрипт "Прошла секунда"
Смотря какую задачу нужно решить? Ни таймер, ни скрипт "Прошла секунда" не подходят для точного отсчета секунд. Оба выполняются по мере возможностей.
Cкрипт "Прошла секунда" основан на функции QueryPerformanceCounter. Таймеры основаны на периодической проверке текущего времени ПК к времени предыдущего срабатывания.
На срабатывание таймера или скрипта "прошла секунда" влияет загруженность сервера скриптами или другими важными задачами, т.е. сервер не начнёт обрабатывать таймер пока не выполнит цикл своих задач. Если эти задачи займут относительно долгое время, то сервер пожертвует точностью таймеров, но не бросит выполнение своих основных задач. Также нужно учитывать что скрипты сначала становятся в очередь и выполняются последовательно, поэтому скрипт "прошла секунда" выполнится после скриптов предшествующих ему в очереди. Поэтому, если при помощи скрипта "Прошла секунда" отсчитывать секунды суммируя их в отдельную переменную, то это полученное время будет содержать все погрешности на каждую секунду. А для отсчета длительных интервалов времени лучше подойдут таймеры (или скрипт "Прошла секунда" с проверкой текущего времени Now относительно времени, которое было при старте таймера), т.к. они не суммируют погрешность в переменную-результат и работают относительно текущего времени ПК.
Кстати, мы можем значительно улучшить распределение по миллисекундам для таймеров (исключив постоянное смещение влево или вправо), тогда график распределения будет очень похож на распределение скрипта "Прошла секунда". Возможно сделаем это в ближайшем обновлении.
Какую задачу Вам нужно решить при помощи таймеров? Если нужно периодическое выполнение кода с точностью до миллисекунд, то это просто невозможно реализовать имеющимися средствами.
« Изменён: 17 Августа 2019, 10:45:39 от Simple-Scada »