Таймер .NET надежнее таймера VB6 - PullRequest
1 голос
/ 18 августа 2011

В старые добрые времена VB6 вы не могли полагаться на таймер, чтобы стрелять с точно заданным интервалом. Если ваша программа выполняла некоторую интенсивную обработку, событие Timer_Tick помещается в стек и обрабатывается только тогда, когда оно достигает инструкции, что может произойти через несколько секунд (?).

Итак, мой вопрос - был ли улучшен контроль таймера .NET, чтобы можно было рассчитывать на срабатывание точно в указанный интервал времени? Я предполагаю, что вышеупомянутое все еще применяется, не так ли? Но разве лучше , чем версия VB6?

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

Ответы [ 2 ]

4 голосов
/ 18 августа 2011

System.Windows.Forms.Timer работает в потоке пользовательского интерфейса и использует насос сообщений;он работает по сути так же, как и таймер VB6.

Но в .NET есть другие таймеры - System.Threading.Timer, System.Timers.Timer, которые используют рабочие потоки в многопоточной среде.

Что«лучше» зависит от ваших требований - использование многопоточного таймера может срабатывать почти с запрошенным интервалом, но это происходит за счет дополнительной сложности, присущей использованию потоков.

0 голосов
/ 18 августа 2011

Проблема с таймерами заключается в том, что она в некотором смысле зависит от операционной системы.Работа таймера должна планироваться ОС, и, если есть другой высокоприоритетный процесс, потребляющий большую часть вычислительной мощности, он может принять решение запланировать запуск своего кода на более позднее время, что даст больше времени для другой, более важной работы.прогресс.

По большей части новые таймеры, вероятно, более надежны, но они настолько же надежны, как и подсистема.Я не уверен, реализует ли Windows аппаратные таймеры (которые являются более надежными) или если .NET VB использует его, если он это делает, но из того, с чем я работал в прошлом, кажется, что он ударил или пропустил.Большую часть времени он почти не работает с очень небольшим запасом, и в других случаях я видел, как при определенных условиях он задерживается на одну секунду.

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

PS: это происходит относительно трудно в течение ТОЧНЫХ интервалов времени, обычно будет разница в пару миллисекунд, поэтому вам не следует полагаться на очень и очень точноеТаймер гранулярности.

...