C++程序运行时间-ZZ

http://www.cnblogs.com/houkai/archive/2013/06/06/3120768.html

http://www.douban.com/note/224133728/

------------------------------------------------------------------------------------

在C++程序的性能分析中,其中重要的一项就是程序的运行时间。虽然程序的运行速度与计算机的配置、计算机的当前状态等有很大关系,但在相对一致的外部环境下,程序运行时间的长短在很大程度上是可以反映程序效率的。

1.一般计时方法

在ctime头文件中,C++提供了计时函数 clock() ,其返回数据类型为 clock_t。

typedef   long   clock_t;

clock()函数返回从“开启程序进程”到“程序中调用clock()函数”这段时间里,CPU时钟计时单元(clock tick)的数目,在MSDN中称之为挂钟时间(wal-clock)。 
在ctime文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒内有多少个CPU时钟计时单元。 
通过clock()/CLOCKS_PER_SEC便可以得到进程的运行时间,一般CLOCKS_PER_SEC的值为1000,可见计时精度可达小数点后3位(毫秒级)。

#define CLK_TCK  CLOCKS_PER_SEC

计时的简单示例如下

/*
 *作者:侯凯
 *说明:clock()计时函数
 *日期:2013-6-6
*/
#include <ctime> //计时用的头文件
#include <iostream>
using namespace std;

int main()
{
    long i = 10000000L;
    clock_t start, end; 

    start = clock();
    while( i-- );//需要计时的程序段
    end = clock();
    printf("The time was: %f\n", (double)(end - start) / CLK_TCK); 

    system("pause");
    return 0;
}

2.精确计时方法

这里精确的含义是计时的精度更高,为了达到更高的计时精度,需要使用精确时间函数QueryPerformanceCounter()和QueryPerformanceFrequency(),它们需要计算机从硬件上支持精确定时器。当然,现在计算机一般都是支持的。 
QueryPerformanceCounter()函数返回高精确度计数器的脉冲数目(计时数),QueryPerformanceFrequency()函数提供了高精度计时器的频率值,即每秒脉冲数。

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()函数获得机器内部定时器的时钟频率,然后在需要严格定时的事件发生之前和发生之后分别调用QueryPerformanceCounter()函数,利用两次获得的计数之差及时钟频率,计算出事件经历的精确时间。其过程与clock()方法类似,但这里的时钟频率很高,测试电脑上频率的QuadPart值为3118031,其精度原高于clocK()。 
为了更好地使用这种计时方式,已将其封装成HpTime类,下载。使用该类,计时程序如下

/*
 *作者:侯凯
 *说明:HpTime类高精度计时
 *日期:2013-6-6
*/
#include "hptime.h"
#include <iostream>
using namespace std;

int main()
{
    long i = 10000000L;
    HpTime hpTime;

    while( i-- );//要计时的函数段

     printf("The time was: %f\n", hpTime.sec());
    system("pause");
    return 0;
}

时间: 2024-08-03 07:10:56

C++程序运行时间-ZZ的相关文章

1026. 程序运行时间(15)

1026. 程序运行时间(15) 要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间.这个时间单位是clock tick,即"时钟打点".同时还有一个常数CLK_TCK,给出了机器时钟每秒所走的时钟打点数.于是为了获得一个函数f的运行时间,我们只要在调用f之前先调用clock(),获得一个时钟打点数C1:在f执行完成后再调用clock(),获得另一个时钟打点数C2:两次获得的时钟打

【转】c++ 获取程序运行时间

转自:http://blog.csdn.net/ghevinn/article/details/22800059 DWORD start_time=GetTickCount(); {...} DWORD end_time=GetTickCount(); DWORD Subtime = (end_time-start_time); int k = 0; 如何获取代码运行时间 在调试中,经常需要计算某一段代码的执行时间,下面给出两种常用的方式: 第一种:使用GetTickCount函数 #inclu

【原】监视程序运行时间

Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); // 开始监视代码 // //要运行的代码 // stopwatch.Stop(); // 停止监视 TimeSpan timeSpan = stopwatch.Elapsed; // 获取总时间 double hours = timeSpan.TotalHours; // 小时 double minutes = timeSpan.TotalMinutes; // 分钟 doubl

linux 统计 程序 运行时间

测试 代码运行时间 linux 中的 <sys/time.h> 中 有个函数可以获取当前时间,精确到 微秒 ---->  gettimeofday() 1 #include <sys/time.h>       // int gettimeofday(struct timeval *tv, struct timezone *tz); 2 /********************************************* 3 * struct timeval 4 *

Java计算两个程序运行时间

一.获取系统当前时间 long startTime = System.currentTimeMillis(); //获取开始时间 doSomething(); //测试的代码段 long endTime = System.currentTimeMillis(); //获取结束时间 System.out.println("程序运行时间:" + (endTime - startTime) + "ms"); //输出程序运行时间 二.以纳秒为单位计算 // 第二种是以纳秒

Java统计程序运行时间

代码如下: 第一种是以毫秒为单位计算的. long startTime = System.currentTimeMillis();    //获取开始时间 doSomething();    //测试的代码段 long endTime = System.currentTimeMillis();    //获取结束时间 System.out.println("程序运行时间:" + (endTime - startTime) + "ms");    //输出程序运行时间

java中读取程序运行时间

第一种是以毫秒为单位计算的. Java代码 //伪代码 long startTime=System.currentTimeMillis();   //获取开始时间 doSomeThing();  //测试的代码段 long endTime=System.currentTimeMillis(); //获取结束时间 System.out.println("程序运行时间: "+(end-start)+"ms"); //伪代码 long startTime=System.c

linux下程序运行时间

如何计算程序运行时间,呵呵,一大堆复杂的程序, 先来个简单的,qsort算法,数据吗?随机产生: 看见了吧,(当然,在数据量小的情况下,感觉不到差别,但是在数据量超大的情况下,就会有明显感觉了.) 60000000 vs 10000000 时间消耗有区别哦. [[email protected] ctest]# time ./33 hehe:60000000 ----------------------------------------before quick sort------------

VC++ 获取系统时间、程序运行时间(精确到秒,毫秒)的五种方法

1.使用CTime类(获取系统当前时间,精确到秒) CString str; //获取系统时间 CTime tm; tm=CTime::GetCurrentTime();//获取系统日期 str=tm.Format("现在时间是%Y年%m月%d日 %X"); MessageBox(str,NULL,MB_OK); a,从CTimet中提取年月日时分秒 CTime t = CTime::GetCurrentTime(); int d=t.GetDay(); //获得几号 int y=t.