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(){};

    void TimerStart(){
        QueryPerformanceFrequency(&large_integer);
        DobDff = large_integer.QuadPart;

        QueryPerformanceCounter(&large_integer);
        IntStart = large_integer.QuadPart;
    }

    double TimerFinish(){
        QueryPerformanceCounter(&large_integer);
        IntEnd = large_integer.QuadPart;
        DobMillseconds = (IntEnd - IntStart) * 1000 / DobDff; //转为ms
        return DobMillseconds;
    }
    
    //当然这个可以不要,根据测试需要添加
//    void OutputToFile(QString fileName){
//        QFile file(fileName);
//        if(!file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text))
//            return;
//        QByteArray data = QByteArray("The Timer of millseconds is: ")
//        + QByteArray::number(DobMillseconds) + QByteArray("ms\n");
//        file.write(data);
//        file.close();
//    }

};

int main ()
{
    MyTimer timer;
    timer.TimerStart();
    Sleep(1.321);
    double tm = timer.TimerFinish();
    std::cout << tm << std::endl;
    
//    timer.OutputToFile("C:/timer.txt");
}

类似的结果如下:



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值