Вверх ↑
Этот топик читают: Гость
Ответов: 204
Рейтинг: 2
#1: 2016-07-03 12:05:26 ЛС | профиль | цитата
Нужно чтобы таймер отсчитывал мс. с точностью вплоть до 10 мс. Заметил что стандартный таймер Timer,люто врёт! Он выдаёт числа значительно меньше чем прошло.
Я уже разобрался что в этом плане точно отсчитывает мс. MMTimer. Хотелось просто узнать почему так? Я раньше считал что Timer не погрешим и отсчитывает ровно столько сколько надо, а оказалось что нет!


code_37428.txt
карма: 1

0
файлы: 1code_37428.txt [451B] [175]
Разработчик
Ответов: 26073
Рейтинг: 2122
#2: 2016-07-03 12:33:57 ЛС | профиль | цитата
ogrif писал(а):
Хотелось просто узнать почему так?

Тут все очень просто -- MMTimer использует системный таймер, для которого система использует специальный выделенный поток, те он асинхронный, а обычный же таймер использует очередь сообщений главного окна приложения, те он синхронный, отчего и происходит рассинхронизация обычного таймера. Те события обычного таймера гарантированно произойдет только тогда, когда система посчитает нужным отдать управление обработчику главного окна приложения, что не относится к MMTimer-у, события которого происходят гарантированно под управлением системы, но это и его недостаток -- MMTimer нельзя использовать с интерфейсными элементами, точно так же, как и обычные потоки по причине их асинхронности.
карма: 22

0
Ответов: 8892
Рейтинг: 823
#3: 2016-07-03 12:44:10 ЛС | профиль | цитата
ogrif, кроме того Timer имеет шаг не 1 миллисекунду, которую вы выставляете в свойствах, а 1/64 секунды (15.6 мсек), и поэтому при выставленных от 0 до 15 мсек он выдаёт события через 15.625 мсек, от 16 до 31 -- через 31.3 мсек и т. д.
карма: 19

0
Гость
Ответов: 17029
Рейтинг: 0
#4: 2016-07-03 16:31:51 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2017-06-14 19:11:57
карма: 0

0
Ответов: 204
Рейтинг: 2
#5: 2016-07-03 20:52:09 ЛС | профиль | цитата
Спасибо, теперь понял!
карма: 1

0
5
Сообщение
...
Прикрепленные файлы
(файлы не залиты)