时间处理函数小结
最近做蓝点的题目,要求算出每个算法的执行时间。
也就是用算法开始的时间减去算法结束的时间,可以调用时间函数。
我到网上一搜,发现处理时间的函数还真不少。
方法1
定义函数
void ChangTick(int ms)
{
int value=65535/55*ms;
unsigned char value_byte;
outport(0x43,0x36);
value_byte=value & 0x00FF;
outportb(0x40,value_byte);
value_byte=value>>8;
outportb(0x40,value_byte);
}
主函数
void main()
{
clock_t BeginTickCount,EndTickCount;
ChangTick(1);
BeginTickCount=clock(); /*开始时间*/
/*添加要处理的函数*/
EndTickCount=clock(); /*结束时间*/
printf("程序运行 %d 秒",EndTickCount-BeginTickCount);
ChangTick(55);
}
这个在TC 里面能运行,在VC下读不出函数outportb和outport
方法2
利用函数 time,要头文件 <time.h>
time (&startTime); //开始时间
/*添加要处理的函数*/
time (&endTime);
方法3
定义结构体
typedef union _ LARGE_INTEGER
{
struct
{
DWORD LowPart; //低位 32位
LONG HighPart; //高位 32位
};
LONGLONG QuadPart; //64位
} LARGE_INTEGER;
主函数:
void main()
{
LARGE_INTEGER litmp;
LONGLONG qt1,qt2;
double dft,dff,dfm;
QueryPerformanceFrequency(&litmp); //获得时钟频率
dff=(double)litmp.QuadPart;
QueryPerformanceCounter(&litmp); //算法开始的时间
qt1=litmp.QuadPart;
/*添加要处理的函数*/
QueryPerformanceCounter(&litmp); //算法结束的时间
qt2=litmp.QuadPart;
dfm=(double)(qt2-qt1);
dft=dfm/dff;
}
这个方法有点复杂,可以处理到毫秒,比较精确
我个人比较喜欢这种方法,但是这种在VC下调试不出来,不知道为什么。
方法4:
# include<time.h>
void main( void )
{
long i = 10000000L; //表示赋一个常整形值100000000给i
clock_t start, finish;
double duration;
/* 测量一个事件持续的时间*/
printf( "Time to do %ld empty loops is ", i );
start = clock();
DataType a[7]={6,10,3,5,1,9,2};
while( i-- )
/*添加要处理的函数*/
finish = clock();
duration = (double)(finish - start) /10000000;
printf( "%f seconds/n", duration );
//system("pause");
}
这种方法有点像方法1,但是用了个小技巧。一个算法执行的时间可能很短,让它执行1000000次时间就不短了。在用执行了1000000次的时间除以10000000,就可以得到执行一次的时间了。
小贴士:获得系统的时间用函数gettime();
就是这两天来的收获。还不小。
自我感觉良好。