Есть ли системное событие, которое я могу подключить для временных обновлений .NET? - PullRequest
0 голосов
/ 04 марта 2010

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

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

Любые другие идеи о том, как я мог бы сделать это?

1 Ответ

2 голосов
/ 04 марта 2010

Я делал это раньше с большим успехом на мобильном устройстве. Этот метод также устраняет дрейф (джиттер).

  1. Установите таймер на небольшой интервал.
  2. Экономьте время.
  3. В случае тиков,
  4. Сравнить текущее время с сохраненным временем.
  5. Если время отличается (секунды изменились),
    1. тогда сделай что-нибудь
    2. и сэкономьте время

В моем конкретном случае мой интервал таймера был 100 мс, поэтому я мог поймать вторые изменения в течение 100 мс. Вы установите интервал в 10 мс.

В зависимости от ваших потребностей, вы можете захотите рассмотреть возможность использования серверного таймера.

[обновление] Быстрее хранить время как целое число (число тиков), а не как DateTime. При инициализации вы выполняете цикл до второго изменения, а затем сохраняете счетчик тиков (Environment.TickCounts). Когда текущее количество тиков минус сохраненное количество тиков больше 1000, вы знаете, что прошла секунда.

...