精确打印程序的运行时间

    在写程序时,经常要计算某一段程序运行所需要的时间,通常用GetCurrentTime来计算时间差,但此函数所得的时间本身就不准备,它的精度也是毫秒级的,所以测试程序的运行时间也只是一个大概时间。要得到微秒级精确度可以使用函数QueryPerformanceCounter和QueryPerformanceFrequency,这两个函数是根据CPU的嘀嗒来进行计数的。为了方便代码编写,利用C++类的构造与析构函数的特性写一个打印代码运行时间的类

class CPrintfCodeTime

{

public:

    CPrintfCodeTime(const char* vCodeName)

    {

        m_strName = (NULL != vCodeName)?vCodeName:"";

        LARGE_INTEGER tTimer;
        QueryPerformanceCounter(&tTimer);

         m_llTime = tTimer.QuadPart;      

    }

    ~ CPrintfCodeTime(void)

    {           

        LARGE_INTEGER tTimer;
        QueryPerformanceCounter(&tTimer);
        double dbTime = double(tTimer.QuadPart - m_llTime);

        //获取CPU的频率
       QueryPerformanceFrequency(&tTimer);
       dbTime = dbTime/tTimer.QuadPart;
       m_strRunCode += vCode;
       char tBuf[100] = {0};
#ifndef __BORLANDC__
       //输出调试信息
       sprintf_s(tBuf,"运行时间为%.3f毫秒\n" ,dbTime*1000);
#else
        sprintf(tBuf,"运行时间为%.3f毫秒\n",dbTime*1000);
#endif
        m_strName += tBuf;
        OutputDebugString(m_strName.c_str());
        m_strName.clear();

    }

    string m_strName;

    LONGLONG m_llTime;

};

本文出自 “阿木雪” 博客,谢绝转载!

你可能感兴趣的:(精确打印程序的运行时间)