C++如何记录程序的运行时间
我们在运行一段C++程序时,有时需要知道运行这个程序花了多长时间.特别是当我们的程序结构很复杂,或者需要处理海量的数据时,高效快速的运行就显得尤为重要.判断一个程序是否高效,最直观的方法就是记录它的运行时间.记录时间一般有两种方法,一种是调用GetTickCount()函数,另一种是调用clock()计时函数.
GetTickCount()函数(不建议)
下面函数的介绍摘自百科:
它返回从操作系统启动到当前所经过的毫秒数,返回值以32位的双字类型DWORD存储,可以存储的最大值是(2^32-1) ms约为49.71天,因此若系统运行时间超过49.71天时,这个数就会归0.此外这个函数并非实时发送,而是由系统每18ms发送一次,因此其最小精度为18ms.
clock()函数(建议)
它返回的是从“开启这个程序进程”到“程序中调用clock()函数”之间的CPU时钟计时单元(clock tick)数.也就是程序一开始CPU就开始"滴答",直到程序运行到clock()函数,这时就会输出到此为止总共"滴答"了多少下,所以它返回的是一个int整型数,而不是时间.要想知道具体的时间,就必须知道你的CPU一秒钟"滴答"了多少下,而CLOCKS_PER_SEC正是这样一个常量.
首先要在程序中引入time.h这个头文件,然后在程序的结尾调用clock()函数:
#include <time.h> //引入头文件
int main()
{
clock_t stop; //定义clock_t变量
//////////////////////////程序具体内容
stop = clock(); //调用clock函数
cout<<"time = "<<stop/CLOCKS_PER_SEC<<"s"<<endl; //输出时间(单位:s)
}
若我们想要知道某一段程序的运行时间,就需要调用两次clock()函数,两次的时间差就是程序运行时间:
#include <time.h> //引入头文件
int main()
{
clock_t start,finish; //定义clock_t变量
//////////////////////////program
start = clock(); //开始时间
//////////////////////////program
finish = clock(); //结束时间
cout<<"time = "<<double(finish-start)/CLOCKS_PER_SEC<<"s"<<endl; //输出时间(单位:s)
}
Linux下获得CLOCKS_PER_SEC数值的方法
本人在Linux平台下运行上面的程序时,出现CLOCKS_PER_SEC未定义的问题,可能在Linux平台中time.h文件中没有定义这个常量,那如何获得这个常量的数值呢?我用了一个很笨但直接的方法.
在程序中输出finish-start的数值,用秒表记录程序的运行时间(当然运行时间要尽量长一点),比如我的程序运行了65s,而finish-start的值在6.5e7附近,那么就可以得出CLOCKS_PER_SEC=1e6,将这个数值替换上即可.