crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Простой точный таймер, работает в 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:
Раскрывающийся текст
#include <QCoreApplication>
#include <QTimer>
#include <QTime>
#include <QFile>

void on_timer();

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QTimer tm;
    tm.setTimerType(Qt::PreciseTimer);

    QObject::connect(&tm, &QTimer::timeout, on_timer);
    tm.start(10);

    return a.exec();
}

static void on_timer()
{
    static QFile file("log.txt");
    static bool tmp = file.open(QIODevice::WriteOnly);

    QString str = QTime::currentTime().toString("hh:mm:ss.zzz") + '\n';
    file.write(str.toLocal8Bit());    
}


Таймер был проверен в Windows 7 x64: по таймеру мы писали данные в COM-порт и проверяли осциллографом, результат хороший. Иногда проскакивают небольшие сдвиги, но частота пакетов сразу восстанавливается.

Сообщение отредактировал mezmay - 24.1.2014, 13:16
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 23:47