clock_t和time_t或time(NULL)和clock()之间的区别

时间:2014-10-17 22:18:17

标签: c time.h

我只是每隔一秒写一个ac程序打印整数值作为练习,这个程序在打印下一个整数之后等待一秒后打印整数,所以程序需要5秒才能完成执行。我正在使用{ {1}}和clock_t作为计时器,但是当我使用time()clock_t作为计时器时它不起作用。

据我所知clocktime_t是绝对时间并使用自1970年以来经过的秒数。time()clock_t使用自程序运行以来的时间。

这是第一个使用clock()time_t

的代码
time(NULL)

这是程序运行时的结果:

#include <stdio.h>
#include <time.h>

int main (void) {
  int i;
  int sec=1;
  time_t start,end;

  start=time(NULL);

  for(i=1;i<=5;i++){
     time_t wait=sec+time(NULL);
     while(time(NULL) < wait) {}
     printf("%d\n",i);
  }
  end=time(NULL);
  printf("program take %d second\n",(unsigned int)difftime(end,start));
  return 0;
}

程序的执行每秒准确地打印整数或等待一秒钟 在打印下一个整数之前

这是使用1 2 3 4 5 program take 5 second clock_t

的第二个程序
clock()

这是使用#include <stdio.h> #include <time.h> int main (void) { int sec=1; int i; clock_t start,end; start=clock(); for(i=1;i<=5;i++){ clock_t wait=sec*CLOCKS_PER_SEC; while(clock ()<wait){} printf("%d\n",i); } end=clock(); printf("the program take %lf second\n",(double)(end-start)/CLOCKS_PER_SEC); return 0; } clock_t

的第二个程序的结果
clock()

并且执行后它不会每一秒打印一次,但是先等待一秒然后打印所有整数而不是等待一秒钟再打印下一个整数。

请解释第二个程序会发生什么,以及它们之间究竟有什么区别 time()和clock()函数?

1 个答案:

答案 0 :(得分:0)

在你的第一个节目中,这个:

time_t wait=sec+time(NULL);

导致wait每次都在循环中更改,比当前时间晚一秒(在以秒为单位测量time_t的系统上,至少这是常见的,但不是必需的)

在你的第二个项目中,这个:

clock_t wait=sec*CLOCKS_PER_SEC;

每次执行时都具有相同的值,因为sec的值永远不会改变。所以在你的第二个程序中,循环将在第一次迭代时等待,直到程序启动一秒钟,并且后续迭代将永远不会再等待,因为程序启动后将超过一秒,clock() < wait将永远不会再次成真。

简而言之,你的两个循环实际上甚至都没有做同样的事情,所以没有理由你期望它们以类似的方式表现。如果你改变了:

clock_t wait=sec*CLOCKS_PER_SEC;

为:

clock_t wait = i * CLOCKS_PER_SEC;

然后你可能会得到更接近你期望的东西。