C++ 高级之程序执行时间监听
C++测试/获取代码执行时间(clock方法与dword 方法的区别)
方法一:Clock
clock()捕捉从程序开始运行到clock()被调用时所耗费的时间,这个单位是常熟CLK_TCK:机器时钟每秒所走的时钟打点数
头部需要引入ctime头文件(即:#include<ctime>)
clock_t startTime,endTime;
startTime = clock();
需要测试的程序代码
endTime = clock();
执行结果
方法二:GetTickCount
GetTickCount是一种函数,GetTickCount返回从操作系统启动所经过的毫秒数,它的返回值是DWORD,
详细解释(GetTickcount函数:它返回从操作系统启动到当前所经过的毫秒数,常常用来判断某个方法执行的时间,其函数原型是DWORD GetTickCount(void),返回值以32位的双字类型DWORD存储,因此可以存储的最大值是(2^32-1) ms约为49.71天,因此若系统运行时间超过49.71天时,这个数就会归0,MSDN中也明确的提到了:“Retrieves the number of milliseconds that have elapsed since the system was started, up to 49.7 days.”。因此,如果是编写服务器端程序,此处一定要万分注意,避免引起意外的状况)
int main()
{
DWORD dwStart = GetTickCount();
cout<<"fhshdfudshfuisdhfdshfdsfdshfiuhsdihfiudshfhsdlihfdis"<<endl;
DWORD dwEnd =GetTickCount();
cout << "The run time is: " <<dwEnd - dwStart / CLOCKS_PER_SEC << "ms" << endl;
getchar();
return 0;
}
执行结果
CLOCK与GetTickCount各自的优缺点和区别:
**clock:**程序中经常用time()函数来返回当前系统时间的秒数,来计时或计算时间差。如果需要用到更高精度的时间,就会自然想到用clock()函数。想当然的认为它返回从程序开始tick数,用clock()/CLOCKS_PER_SEC就能得到以秒计数的时间了。然而结果不是这样,看下面的程序log。一行开头是系统时间,后面是clock()算出来的,明显比系统时间要慢不少,也就是说clock计算执行时间的误差较大
GetTickCount: 在要求误差不大于1毫秒的情况下,可以采用GetTickCount()函数,该函数的返回值是DWORD型,表示以毫秒为单位的计算机启动后经历的时间间隔。使用下面的编程语句,可以实现50毫秒的精确定时,其误差小于1毫秒。
对于一般的实时控制,使用GetTickCount()函数就可以满足精度要求,但要进一步提高计时精度,就要采用QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数。这两个函数是VC提供的仅供Windows 9X使用的高精度时间函数,并要求计算机从硬件上支持高精度计时器。QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数的原型为:
BOOL QueryPerformanceFrequency(LARGE—INTEGER *lpFrequency);
BOOL QueryPerformanceCounter(LARGE—INTEGER *lpCount) ;