C++计算程序运行时间

计算程序运行时间 

方法一(精确到ms): 

#include <iostream> #include <time.h>//关键  
using namespace std;  

int main()

 { 

    clock_t start, finish;     double totalTime;  
    start = clock();  
    //需要测试运行时间的代码段放在这  

    finish = clock();

    totalTime = (double)(finish - start);     

    cout<<"花费"<<totalTime<<"毫秒"<<endl;  
    return 0;

 } 


方法二(精度小于ms,达到微秒级):

使用了QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数。在进行定时之前,先调用QueryPerformanceFrequency()函数获得机器内部定时器的时钟频率,然后在需要严格定时的事件发生之前和发生之后分别调用QueryPerformanceCounter()函数,利用两次获得的计数之差及时钟频率,计算出事件经历的精确时间.由于计时函数本身要耗费很少的时间,原则来讲需要减去一个很少的时间开销.但一般将其忽略.

QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数的原型为:     
               BOOL      QueryPerformanceFrequency   
   (LARGE_INTEGER      *lpFrequency)    ;   
               BOOL      QueryPerformanceCounter   
   (LARGE_INTEGER      *lpCount)    ;   
    
   ----    数据类型LARGE_INTEGER既可以是一个作为8字节长的整型数,也可以作为两个4字节长的整型数的联合结构,其具体用法根据编译器是否支持64位而定。该类型的定义如下:     
               typedef      union      _LARGE_INTEGER   
               {   
           struct   
           {   
       DWORD      LowPart    ;      //    4字节整型数   
       LONG          HighPart    ;      //    4字节整型数   
           };   
           LONGLONG          QuadPart    ;      //    8字节整型数   
               }      LARGE_INTEGER    ;   
    
   ----    在进行计时之前,应该先调用QueryPerformanceFrequency()函数获得机器内部计时器的时钟频率。作者在主频为266、300、333的三种PentiumⅡ机器上使用该函数,得到的时钟频率都是1193180Hz。接着,作者在需要严格计时的事件发生之前和发生之后分别调用QueryPerformanceCounter()函数,利用两次获得的计数之差和时钟频率,就可以计算出事件经历的精确时间。下面的程序是用来测试函数Sleep(100)的精确持续时间。     
   LARGE_INTEGER      litmp    ;   
   LONGLONG      QPart1,QPart2    ;   
   double      dfMinus,    dfFreq,    dfTim    ;   
    
   QueryPerformanceFrequency(&litmp)    ;     
   //    获得计数器的时钟频率   
   dfFreq    =    (double)litmp.QuadPart    ;   
    
   QueryPerformanceCounter(&litmp)    ;     
   //    获得初始值   
   QPart1    =    litmp.QuadPart    ;   
    
   //添加测试代码
    
   QueryPerformanceCounter(&litmp)    ;     
   //    获得中止值   
   QPart2    =    litmp.QuadPart    ;   
    
   dfMinus    =    (double)(QPart2    -    QPart1)    ;   
   dfTim    =    dfMinus    /    dfFreq    ;       
   //    获得对应的时间值   

得到的dfTim是以秒为单位。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值