Windows下精确获取程序的运行时间可精确到微妙

在Windows下可以用系统提供的API函数 QueryPerformanceFrequency 和 QueryPerformanceCounter 来进行高精度的计时,现在的机器基本上都提供这种高精度的计时啦,所以不用担心。利用该函数可以精确的计时到微妙级别。msdn的描述见这里。

QueryPerformanceFrequency() 可以得到CPU的时钟频率。

QueryPerformanceCounter() 可以通过两次的差值来得到CPU的时钟周期差值。

这样就可以计算出两次差值之间所花费的时间,当然这里计算出来的时间是秒,一般都换算为毫秒或者微妙来表示。

下面我把该函数封装到了一个类里面,直接用起来还是比较方便的,代码也比较简单,下面就直接贴代码了。

#include <iostream>
#include <Windows.h>

//#include <QFile>
//#include <QString>
//#include <QByteArray>

class MyTimer{

private:
    LARGE_INTEGER large_integer;
    __int64 IntStart;
    __int64 IntEnd;
    double DobDff;
    double DobMillseconds;

public:
    MyTimer(){};
### QTime 方法记录程序或函数运行耗时的使用教程 QTime 是 Qt 中的一个类,主要用于表示时间以及处理时间相关的计算。尽管它不适合用于定时操作,但它非常适合用来测量代码片段的执行时间。通过 `start()` 和 `elapsed()` 函数,可以轻松实现这一功能。 以下是详细的说明和示例: #### 测量代码执行时间的核心原理 `QTime::start()` 会重置内部计时器并将当前时刻设为起点。之后调用 `QTime::elapsed()` 可以获得从上次调用 `start()` 或 `restart()` 到现在的毫秒数[^2]。 #### 示例代码:使用 QTime 测量函数运行耗时 下面是一个简单的例子,展示了如何利用 QTime 来测量一段代码的执行时间。 ```cpp #include <QTime> #include <QDebug> int heavyComputation() { int result = 0; for (int i = 0; i < 1000000; ++i) { result += i * i; // 假设这是一个复杂的计算过程 } return result; } int main() { QTime timer; timer.start(); // 开始计时 // 需要测量的部分代码 int computationResult = heavyComputation(); // 获取经过的时间(单位:毫秒) int elapsedTime = timer.elapsed(); qDebug() << "代码执行时间:" << elapsedTime << "ms"; qDebug() << "计算结果:" << computationResult; return 0; } ``` 在这个示例中,`heavyComputation()` 表示需要被测量其运行时间的一段复杂逻辑。通过在该部分前后分别调用 `timer.start()` 和 `timer.elapsed()`,可以获得这段代码的实际运行时间[^4]。 #### 关键点解析 - **`start()`**: 初始化计时器或将计时器重置到当前时间点。 - **`elapsed()`**: 返回自上一次调用 `start()` 或 `restart()` 后所经历的时间,单位为毫秒。 - 如果希望中途重新开始计时而不创建新的对象,则可使用 `restart()` 替代 `start()`,此时 `restart()` 的返回值即是从前一刻到现在的时间间隔。 #### 微妙级别精度的需求 如果需要更精确时间度量(比如微秒级),可以通过多次循环累积的方式间接估算,或者考虑其他更高精度的方法,但这通常超出了大多数应用场景的要求[^3]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值