转自: http://www.cppblog.com/qey/articles/66772.html
精确测量某一个程序运行的确切时间是很困难的,所谓的测量运行时间只是做一个近似的测量。
目前测量程序运行时间主要有两类方法,一种是基于计时器Timer的,另一种是基于计数器Counter的。
Unix/Linux:
clock_t times(struct tms *buf);
//return value:系统自启动以来经过的时间滴答数,常数CLK_TCK表示每秒经过的时钟滴答数
//parameter:一个指向tms结构的指针
//使用该函数时要包含头文件<sys/times.h>
Win32:
DWORD GetTickCount(VOID)
//return value:the number of milliseconds that have elapsed since the system was started.
//使用时应包含<windows.h>,link阶段应链接 kernel32.lib
如果要编写可进行平台移植的代码,可以利用下面的函数:
clock_t clock(void)
//常数CLOCKS_PER_SEC保证将该函数返回的值格式化为秒数
//使用该函数时要包含头文件<time.h>
//unix/linux win32 #include <ctime> #include <iostream> using namespace std; time_t start = clock(); //程序开头 //程序结束 time_t end =clock(); double dur =static_cast<double>(end -start)/CLOCKS_PER_SEC*1000; cout<< "\nRunning Time: " <<dur << "milliseconds"<<endl; //关于clock 的返回值以及其他信息 //可以查MSDN 的time.h 对应c++ 头文件为<ctime> 。
// win32
#include <windows.h> #include <cstdlib> #include <cstdio> #include <iostream> int beginTime=GetTickCount(); int endTime=GetTickCount(); endTime-=beginTime; cout<< "nRunning time:"<< endTime << "ms"<< endl;
#include<stdio.h> int main() { unsigned int cycle,i; __asm { CPUID RDTSC mov cycle,eax } for(i=0;i<10000;i++) ; __asm { CPUID RDTSC sub eax,cycle mov cycle,eax } printf("the program duration cycle = %d/n",cycle); return 0; }