1、概述
QElapsedTimer是Qt框架中提供的一个高精度计时器类,主要用于测量代码执行时间和事件间隔。它能够在不同操作系统上提供准确的计时功能,并返回毫秒或纳秒级别的时间。QElapsedTimer没有父类,不支持Qt的元对象系统,因此只有接口函数。其计算精度比较高,非常适用于需要高精度计时的应用程序,如图形应用程序、动画游戏以及性能测试等。
2、重要函数
QElapsedTimer类提供了多个接口函数,以下是一些常用的接口函数及其作用:
- start():复位并启动计时器,返回当前时间值。如果计时器已经在运行,则重新调用start()方法将重置计时器。
- restart():重新启动计时器,并返回从上一次启动(或重启)以来的时间值(毫秒)。这允许测量间隔内发生的事件。
- elapsed():返回从启动或重启计时器以来经过的毫秒数。在无效的QElapsedTimer上调用此函数会导致未定义行为。
- nsecsElapsed():返回从启动或重启计时器以来经过的纳秒数。
- isValid():检查操作系统是否支持精准计时器,如果支持则返回true。在调用elapsed()或nsecsElapsed()之前,应该检查isValid()方法以确保计时器已经启动并且正在运行。
- invalidate():使计时器失效,即它不再返回正确的时间。这可以用于停止计时器并释放其内部资源。
- hasExpired(int timeout):检查QElapsedTimer计时器是否已经到达了设定的超时时间(毫秒)。如果超过给定的timeout,则返回true,否则返回false。
- clockType():返回这个QElapsedTimer实现使用的时钟类型。
3、常用枚举类型
-
QElapsedTimer::ClockType
:-
QElapsedTimer::SystemTime
:使用系统时间。 -
QElapsedTimer::MonotonicClock
:使用单调时钟(不会受到系统时间调整的影响)。 -
QElapsedTimer::PreciseTimer
:使用高精度时钟(如果可用)。 -
QElapsedTimer::TickCounter
:使用系统滴答计数器。
-
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 创建QElapsedTimer对象
QElapsedTimer timer;
// 启动计时器
timer.start();
// 执行一些任务
for (int i = 0; i < 200000000; i++);
// 记录结束时间点并计算耗时
qint64 endTime = timer.nsecsElapsed();
qDebug() << "Time elapsed:" << endTime << "ns";
// 重启计时器并处理下一个任务
quint64 restartTime = timer.restart(); // 返回的是毫秒,上一次start到当前的时间
qDebug() << "restarted time:" << restartTime << "ms";
for (int i = 0; i < 400000000; i++);
// 再次记录时间差并打印结果
qint64 elapsedTime = timer.nsecsElapsed();
qDebug() << "Total elapsed time:" << elapsedTime << "ns";
// 使计时器失效
timer.invalidate();
return a.exec();
}
觉得有帮助的话,打赏一下呗。。
需要商务合作(定制程序)的欢迎私信!!