【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
? ? ? ? 软件除了功能开发、debug之外,另外一个很重要的部分就是软件的优化和提高。这里面的优化,当然就是希望软件能够处理更多的数据、达到更高的效率。在这一方面,qt也不例外。不过qt本身已经提供了的类似的功能类,使用起来特别方便。我们今天正好趁这个机会学习下,应该怎么用qt提供的类或者api接口来测量对应函数的运行时间。
? ? ? ? 首先,我们创建一个基础的widget工程,纯粹是为了代码编译方便。
? ? ? ? qt下面对函数进行时间统计,用到的头文件是QElapsedTimer这个文件,类也是同名类。使用的时候呢,首先创建一个QElapsedTimer类型的变量timer。接着statimer定时器,在调用了对应的测试函数之后,继续调用timer.elapsed()函数。这样我们就可以知道当前总共花了多少时间。这么说可能有点空泛,我们来通过代码进行分析。
#include <Windows.h>
#include <QApplication>
#include <QElapsedTimer>
#include <QDebug>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QElapsedTimer timer;
timer.start(); // start, get start value
// invoke myFunction here
Sleep(1000);
qint64 elapsedTime = timer.elapsed(); // get stop value
qDebug() << "Function execution time:" << elapsedTime << "milliseconds";
return app.exec();
}
? ? ? ? 为了测试这个时间是不是真的有那么准,我们用windows平台提供的Sleep函数来进行验证。如果得到elapsedTimer没有什么问题,那代表相关的测量是完全ok的。
? ? ? ? 之前的延时是1000ms,得到的打印是1010ms,看上去不是特别离谱。因此,我们可以测试另外一个循环,看看函数花了多少时间,整个代码是这样的,
#include <Windows.h>
#include <QApplication>
#include <QElapsedTimer>
#include <QDebug>
// measure
void myFunction() {
for (int i = 0; i < 100000000; ++i) {
// some operation
}
}
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QElapsedTimer timer;
timer.start(); // start, get start value
// invoke myFunction here
myFunction();
qint64 elapsedTime = timer.elapsed(); // get stop value
qDebug() << "Function execution time:" << elapsedTime << "milliseconds";
return app.exec();
}
? ? ? ? 测试函数myFunction当中,i循环了1亿次,我们看下大约需要花费多少时间,
? ? ? ? 不管是windows平台,还是linux平台,对函数、模块和功能进行时间分析和统计,这都是基本技能,建议大家可以好好掌握一下。另外及时不是qt模块,最好大家也可以自己写出对应的时间统计函数。