调试-计时函数

在进行代码优化的时候,我们需要用计时函数找出最应该做优化的地方,即好刀用在好刃上。在VS.C++程序中,以下函数能计算出程序运行的时间:

//定义变量
LARGE_INTEGER litmp;
LONGLONG QPart1;
LONGLONG QPart2;
double dfMinus;
double dfFreq;
double dfTim;
// 获得计数器的时钟频率
QueryPerformanceFrequency(&litmp);       
dfFreq = (double)litmp.QuadPart;   
// 获得初始值
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart;           
 //需要测试的函数MyFunction();如Sleep(10);
Sleep(10);
 // 获得终值
QueryPerformanceCounter(&litmp);
QPart2 = litmp.QuadPart;       
//运行时间即为终值与初值之差,然后再除以时钟频率  
dfMinus = (double)(QPart2 - QPart1);
dfTim = dfMinus / dfFreq;
//将它换算成微秒级
dfTim =* 1000000;

上述中出现的二个函数QueryPerformanceCounter(); QueryPerformanceFrequency();的头文件为windows.h。其精度取决于硬件高精度计时器的频率,一般来讲,精度还是远远够了的,微秒级轻而易举。对这两个函数的具体说明可以查找MSDN。

我们看到,对于一个小小的测试计时程序,其代码量就如此之多,对于仅有一个需要测试的时候,复制和粘贴还是so easy,但如果需要测试100个呢?以下函数试图改进此问题:

int QueryEllapsedTime(int mode)
{
   static LARGE_INTEGER litmp;
   static LONGLONG QPart1;
   static LONGLONG QPart2;
   static double dfMinus;
   static double dfFreq;
   static double dfTim;

   if (0 == mode)
    {
        QueryPerformanceFrequency(&litmp); // 获得计数器的时钟频率
        dfFreq = (double)litmp.QuadPart;   // 获得计数器的时钟频率
        QueryPerformanceCounter(&litmp);
        QPart1 = litmp.QuadPart;           // 获得初始值
    }
   else
    {
        QueryPerformanceCounter(&litmp);
        QPart2 = litmp.QuadPart;           //获得中止值
        dfMinus = (double)(QPart2 - QPart1);
        dfTim = dfMinus / dfFreq;
    }
   return int(dfTim * 1000000);
}

当我们再需要对程序进行计时测试时,可以如下编写代码:

QueryEllapsedTime(0);
Sleep(10);
int time = QueryEllapsedTime(1);

编程的界面一目了然!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值