Простой точный таймер, работает в Windows, использование PreciseTimer |
Здравствуйте, гость ( Вход | Регистрация )
Простой точный таймер, работает в Windows, использование PreciseTimer |
mezmay |
24.1.2014, 13:09
Сообщение
#1
|
Активный участник Группа: Участник Сообщений: 272 Регистрация: 13.7.2009 Из: Ростов-на-Дону Пользователь №: 904 Спасибо сказали: 16 раз(а) Репутация: 1 |
Случайно увидел интересную опцию класса QTimer - свойство timerType.
http://qt-project.org/doc/qt-5.0/qtcore/qt...#timerType-prop Оно может принимать значения: Цитата enum Qt::TimerType The timer type indicates how accurate a timer can be. Qt::PreciseTimer 0 Precise timers try to keep millisecond accuracy Qt::CoarseTimer 1 Coarse timers try to keep accuracy within 5% of the desired nterval Qt::VeryCoarseTimer 2 Very coarse timers only keep full second accuracy По умолчанию при создании объекта класса QTimer используется значение Qt::CoarseTimer, то есть грубый таймер, в Windows - обычный таймер. Для использования точного таймера надо выбрать Qt::PreciseTimer, и тогда в Windows будет при возможности использоваться Multimedia timer. Простой рабочий пример на Qt 5.1: Раскрывающийся текст
Таймер был проверен в Windows 7 x64: по таймеру мы писали данные в COM-порт и проверяли осциллографом, результат хороший. Иногда проскакивают небольшие сдвиги, но частота пакетов сразу восстанавливается. Сообщение отредактировал mezmay - 24.1.2014, 13:16 |
|
|
Litkevich Yuriy |
24.1.2014, 14:28
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
вообще это давняя легенда: использование COM-порта и некого точного таймера.
Т.к. таймер к программе никакой жёсткой привязки не имеет. Когда очередь событий виндовоза дойдёт до твоего приложения, только тогда оно отреагирует, не раньше не позже. И эти интервалы времени сильно зависят от работы других программ. У меня например когда Аська стартует, она при мерно на полсекунды "глушит" работу многих программ. |
|
|
Iron Bug |
28.1.2014, 6:59
Сообщение
#3
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
Т.к. таймер к программе никакой жёсткой привязки не имеет. Когда очередь событий виндовоза дойдёт до твоего приложения, только тогда оно отреагирует, не раньше не позже. И эти интервалы времени сильно зависят от работы других программ. У меня например когда Аська стартует, она при мерно на полсекунды "глушит" работу многих программ. именно поэтому не надо в риалтайм приложениях использовать вендозные события: они слишком тормозные и весь эффект риалтайма просто потеряется. а что касается "зависимости" от работы других программ - это лишь вопрос приоритетов. выше стоят только драйверы. венда сильно тормозит, когда начинается обмен по сети. если вырубить у неё сеть - она работает гораздо быстрее. |
|
|
Текстовая версия | Сейчас: 25.11.2024, 21:18 |