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