C++:clock函数 vs time函数
1、clock()计时函数:
①头文件:
C++头文件ctime,time.h中的库函数clock(),提供了测试函数运行时间的方法:
②clock()返回类型为clock_t类型;
③clock_t类型:clock_t实际为long 类型,long clock_t;
④常量CLOCKS_PER_SEC,表示每一秒(per second)有多少个时钟计时单元;
即每过千分之一秒(1毫秒),调用clock()函数返回的值就加1;
2、clock()函数功能:
返回从开启这个程序进程到调用clock()函数之间的CPU时钟计时单元数即挂钟时间,
单位是毫秒;
【注】:
程序中,如果写成(double)((finish - start) / CLOCKS_PER_SEC)这种形式,
一般情况下这个值会为0.0000,错误;
因为:finish,start,CLOCKS_PER_SEC均为long型变(常)量,若finish-start < 1000,则
(finish - start) / CLOCKS_PER_SEC = 0,再将其强制转换为double型数据,得到0.0000。
而如果写成(double)(finish - start) / CLOCKS_PER_SEC,先会将finish - start转换成double型数据,然后执行"/"操作,则编译器自动将CLOCKS_PER_SEC提升为double型,故而是两
个double数据相除能得到正确结果。
3、clock()函数应用:
clock函数来计算你的机器运行一个循环或者处理其它事件到底花了多少时间:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
long i = 10000000L;
clock_t start, finish;
double duration;
/* 测量一个事件持续的时间*/
printf( "Time to do %ld empty loops is ", i) ;
start = clock();
while( i-- );
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "%f seconds\n", duration );
system("pause");
}
4、time计时函数:
①头文件为time.h
②函数原型:time_t time(time_t * timer)
③功能: 获取当前的系统时间,返回的结果是一个time_t类型;
其实就是一个大整数,其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。
然后调用localtime将time_t所表示的CUT时间转换为本地时间(我们是+8区,比UTC多8个小时)并转成struct 类型,该类型的各数据成员分别表示年月日时分秒。
5、time_t数据类型:
time函数的原型也可以理解为 long time(long *tloc),即返回一个long型整数。
因为在time.h这个头文件中time_t实际上就是long。
【注】:
①因为time_t类型编码不能确定,所以尽量不要用t1-t2方式计算两个time_t之间的时间间隔,而应该用double difftime( time_t time_end, time_t time_beg )函数计算时间间隔。
②time_t表示计算机ji yuan时间,struct 表示标准日历时间。
6、time函数应用:
计时示例:
time_t start, end;
start = time(NULL);
_sleep(1000);
end = time(NULL);
printf("duration: %lf\n", difftime(end, start));
//time()函数结合其他函数
//获得当前系统时间或是标准时间。
#include <stdio.h>
#include <time.h>
int main()
{
time_t timer;//time_t就是long int 类型
....
timer = time(NULL);//这一句也可以改成time(&timer);
tblock = localtime(&timer);
printf("Local time is: %s\n",asctime(tblock));
getchar();
return 0;
}