0

我只是编写 ac 程序以每隔一秒打印一次整数值作为练习,该程序在打印下一个整数之前等待一秒钟后打印整数,因此程序需要 5 秒才能完成执行。我正在使用clock_ttime()作为计时器和它可以工作,但是当我使用clock_tclock作为计时器时它不起作用。

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

这是第一个使用time_tandtime(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_tandclock()

#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()

1
2 
3
4
5
the program take 0.998901 second

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

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

4

1 回答 1

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;

那么你可能会得到更接近你期望的东西。

于 2014-10-17T22:24:45.227 回答