Нужно чтобы таймер отсчитывал мс. с точностью вплоть до 10 мс. Заметил что стандартный таймер Timer,люто врёт! Он выдаёт числа значительно меньше чем прошло.
Я уже разобрался что в этом плане точно отсчитывает мс. MMTimer. Хотелось просто узнать почему так? Я раньше считал что Timer не погрешим и отсчитывает ровно столько сколько надо, а оказалось что нет!
code_37428.txt
Этот топик читают: Гость
Ответов: 204
Рейтинг: 2
|
|||
карма: 1 |
| ||
файлы: 1 | code_37428.txt [451B] [193] |
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
ogrif писал(а): Хотелось просто узнать почему так?Тут все очень просто -- MMTimer использует системный таймер, для которого система использует специальный выделенный поток, те он асинхронный, а обычный же таймер использует очередь сообщений главного окна приложения, те он синхронный, отчего и происходит рассинхронизация обычного таймера. Те события обычного таймера гарантированно произойдет только тогда, когда система посчитает нужным отдать управление обработчику главного окна приложения, что не относится к MMTimer-у, события которого происходят гарантированно под управлением системы, но это и его недостаток -- MMTimer нельзя использовать с интерфейсными элементами, точно так же, как и обычные потоки по причине их асинхронности. |
|||
карма: 22 |
|
Ответов: 8930
Рейтинг: 823
|
|||
ogrif, кроме того Timer имеет шаг не 1 миллисекунду, которую вы выставляете в свойствах, а 1/64 секунды (15.6 мсек), и поэтому при выставленных от 0 до 15 мсек он выдаёт события через 15.625 мсек, от 16 до 31 -- через 31.3 мсек и т. д.
|
|||
карма: 19 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 4 раз(а), последний 2025-01-10 12:55:13 |
|||
карма: 0 |
|
Ответов: 204
Рейтинг: 2
|
|||
Спасибо, теперь понял!
|
|||
карма: 1 |
|
5