AS3: синхронизировать событие таймера с фактическим временем? - PullRequest
0 голосов
/ 19 апреля 2010

Я планирую использовать событие таймера для срабатывания каждую секунду (для приложения часов).

Возможно, я ошибаюсь, но я предполагаю, что, вероятно, будет (очень небольшая) проблема синхронизации с фактическим системным временем. Например, событие таймера может сработать, когда фактическое системное время в миллисекундах равно 500 вместо 0 (это означает, что секунды будут частично «сдвинуты по фазе», если хотите).

Есть ли способ либо синхронизировать событие таймера с реальным временем, либо получить какое-либо событие системного времени, чтобы сработало, когда в AS3 тикает секунда?

Также, если я устанавливаю таймер на срабатывание каждые 1000 миллисекунд, это гарантировано или может быть какое-то смещение в зависимости от нагрузки приложения?

Это, вероятно, незначительные проблемы, но мне просто любопытно.

Спасибо.

Ответы [ 3 ]

1 голос
/ 19 апреля 2010

Текущее время можно узнать, используя Дата . Если вы действительно хотели, вы можете попытаться контролировать дрожание таймера, пытаясь выровнять его с тем, что возвращает Date. Я не уверен, что это даже будет проблемой (конечно, если ваше приложение не будет работать в течение длительного времени, и даже тогда я не уверен, что ошибка будет создаваться слишком быстро).

Обратите внимание, что ОС обычно работает с точностью до нескольких миллисекунд, и вам может потребоваться сделать что-то еще, если вам нужна такая точность.

0 голосов
/ 23 апреля 2010

К сожалению, я не думаю, что Таймер гарантированно останется на том же уровне. Весьма вероятно, что он будет дрейфовать в течение определенного периода времени (например, если вы установите его на 1000 мс, он может срабатывать каждые 990 мс, что является очень небольшой разницей, но со временем он будет складываться). Я думаю, что вы должны сделать, как вы сказали, запускать каждые 100 мс или около того, а затем проверять объект Date, чтобы определить, прошла ли еще одна секунда.

0 голосов
/ 20 апреля 2010

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

Таким образом, установка таймера на срабатывание каждые 100 мс вместо 1000 мс приведет к тому, что максимальная ошибка будет 99 мс вместо 999 мс. Таким образом, в зависимости от требуемой точности / производительности, эти значения могут быть изменены.

Если вместо этого частота таймера должна оставаться на 1 секунду, мы можем создать временный инициализирующий таймер, который срабатывает с очень короткими интервалами (~ 1 мс). Затем на каждом тике мы отслеживаем текущее и предыдущее время. Если секунды времени изменились (настоящие часы изменились), то мы можем запустить главный таймер (с 1000 мс) в этот момент. Это обеспечит запуск 1-секундного таймера при изменении секунд реального времени (с ошибкой в ​​миллисекундах из одной цифры вместо 3-х цифр в миллисекундах)

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

Я попробую это на этой неделе и доложу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...