Я пишу простую демонстрацию, чтобы проверить точность таймера.Ниже приведены мои коды:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//two singleshot timers
QTimer::singleShot(1000,Qt::PreciseTimer,this,SLOT(myslot1()));
QTimer::singleShot(10000,Qt::PreciseTimer,this,SLOT(myslot2()));
//metrics of timing accuraccy
t = 0;
timer = new QTimer();
timer->setInterval(100);
timer->setTimerType(Qt::PreciseTimer);
connect(timer,SIGNAL(timeout()),this,SLOT(timerhandler()),Qt::DirectConnection);
timer->start();
}
void MainWindow::myslot1()
{
qDebug()<<"myslot1 called: t="<<100*t;
ui->lcdNumber1->display(1);
}
void MainWindow::myslot2()
{
qDebug()<<"myslot2 called: t="<<100*t;
ui->lcdNumber2->display(2);
}
void MainWindow::timerhandler()
{
t++;
ui->lcdNumber->display(t*100);
}
Запуск этих кодов дает:
myslot1 called: t= 900
myslot2 called: t= 9900
Мне кажется, что для точного таймера существует ошибка синхронизации около 100 мс.Я прав?Является ли очевидная ошибка из-за интервала времени, который я установил для timer
?Согласно некоторым сообщениям ( QTimer вообще не точен? ), QTimer может быть не совсем точным.