Суть программы. В ней два QLineEdit, в которые будет выводится время в миллисекундах, затраченное на выполнение некоторых процедур. В первую линию будет выводится время, затраченное на работу QTimer + сигналы и слоты, во вторую линию -- время на события таймера. Нажимая кнопку Start, мы запускаем сравнение и ждем результаты. Дополнительными параметрами в программе являются count - счетчик - он будет просто считать до определенного значения и, когда оно наступит, запишет время исполнения, остановит таймер и выдаст результат; другой параметр есть milliseconds - период таймера в миллисекндах.
Сравнение производил по двум характеристикам (OS Windows XP, Intel Core2 6300 1.86GHz)
1) Выдерживают ли установленный период timerEvent() и QTimer
2) Насколько быстрее timerEvent(), чем QTimer
Получены следующие результаты:
+) Период таймера = 10 миллисекундам. timerEvent() ровно выдерживает установленный интервал, QTimer иногда чуть-чуть опаздывает.
+) Период таймера = 5 миллисекундам. timerEvent() ровно выдерживает установленный интервал, QTimer всегда чуть опаздывает.
+) Период таймера = 2 миллисекундам. timerEvent() чуть запаздывает и немного не выдерживает установленный интервал. QTimer заметно опаздывает.
+) Период таймера = 1 миллисекунда. timerEvent() чуть (!) чаще опережает и немного не выдерживает установленный интервал. QTimer заметно опаздывает от 25% до 40%.
Точные числа не привел специально. Предлагаю вам самим проверить
progtime.h
#ifndef PROGTIME_H
#define PROGTIME_H
#include <QtGui>
class MyWidget : public QWidget
{
Q_OBJECT
private:
QLineEdit* line1;
QLineEdit* line2;
QPushButton* pushbutton;
QVBoxLayout* vlayout;
QTime* time;
QTimer* timer;
void createLayouts();
private slots:
void startCheck();
void timerSlot();
protected:
void timerEvent(QTimerEvent* event);
public:
MyWidget(QWidget* parent = 0);
};
#endif
progtime.cpp
#include <QtGui>
#include <math.h>
#include "progtime.h"
int count=0;
int maxcount=100;
int milliseconds=2;
int id_timer;
MyWidget::MyWidget(QWidget* parent) : QWidget(parent)
{
createLayouts();
}
void MyWidget::createLayouts()
{
line1 = new QLineEdit(this);
line2 = new QLineEdit(this);
line1->setText("time interval 1");
line2->setText("time interval 2");
pushbutton = new QPushButton("Start", this);
connect(pushbutton, SIGNAL(clicked()), this, SLOT(startCheck()));
vlayout = new QVBoxLayout(this);
vlayout->addWidget(line1);
vlayout->addWidget(line2);
vlayout->addWidget(pushbutton);
time = new QTime;
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(timerSlot()));
}
void MyWidget::startCheck()
{
line1->setText("time interval 1");
line2->setText("time interval 2");
time->start();
timer->start(milliseconds);
}
void MyWidget::timerSlot()
{
count++;
if (count==maxcount)
{
QString str=QString::number(time->elapsed());
line1->setText(str);
timer->stop();
count=0;
time->start();
id_timer=startTimer(milliseconds);
}
}
void MyWidget::timerEvent(QTimerEvent *event)
{
count++;
if (count==maxcount)
{
QString str=QString::number(time->elapsed());
line2->setText(str);
killTimer(id_timer);
count=0;
}
}
main.cpp
#include <QApplication>
#include "progtime.h"
int main(int argc, char** argv)
{
QApplication app(argc, argv);
MyWidget win;
win.resize(200, 100);
win.show();
return app.exec();
}
PS Цитировать Qt Assistant для меня не нужно