①本质区别
time(NULL)是指返回从1970年1.1日(元旦)午夜0点到现在的秒数 实际时间
clock clock是进程使用的cpu时间,作用不大。 处理器时间或频率,
②返回值区别
time()得到的是秒做单位的
clock()得到的是毫秒做单位的, 因此通常 (double)clock()/CLOCKS_PER_SEC
time (null) 计算计算机的时间
clock 常粗略的计算任务的执行速度
③宏解释
define CLK_TCK CLOCKS_PER_SEC
CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:
define CLOCKS_PER_SEC ((clock_t)1000)
可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1。
可以使用公式clock()/CLOCKS_PER_SEC来计算一个进程自身的运行时间。例如:
void elapsed_time()
{
printf("Elapsed time:%u secs.\n",clock()/CLOCKS_PER_SEC);
}
time()
主要用来获取当前的系统时间,返回的结果是一个time_t类型,其值表示从UTC(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。然后调用localtime函数将 time_t所表示的UTC时间转换为本地时间(我们是+8区,比UTC多8个小时)并转成struct tm类型,该类型的各数据成员分别表示年月日时分秒。
④ 实用
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");
return 0;
}
这是一个求时间差的程序,那么为什么要除以CLOCKS_PER_SEC呢? 这是因为clock()是以毫秒为单位,要正确输出时间差需要把它换成秒,因此需要除以CLOCKS_PER_SEC。 clock()函数计算出来的是硬件滴答的数目,不是毫秒。在TC2.0中硬件每18.2个滴答是一秒,在VC++6.0中硬件每1000个滴答是一 秒。
上面我们看到时钟计时单元的长度为1毫秒,那么计时的精度也为1毫秒,那么我们可不可以通过改变CLOCKS_PER_SEC的定义,通过把它定义的大一些,从而使计时精度更高呢?通过尝试,你会发现这样是不行的。在标准C/C++中,最小的计时单位是一毫秒。
下面是一个更为简单的例子:
include <stdio.h>
include <time.h>
int main()
{
int n = 10000000;
while(n--);
printf("%f\n",clock()/(double)CLOCKS_PER_SEC);
return 0;
}
在VC++6.0中可以用CLK_TCK替换CLOCKS_PER_SEC。
time 实用
while(n>0)
{
long t = time(NULL)
t += 1;
while(t<time(NULL));
cout<<t/CLOCKS_PER_SEC<<endl;
n--;
}