【问题标题】:Difference between clock_t and time_t or time(NULL) and clock()clock_t 和 time_t 或 time(NULL) 和 clock() 之间的差异
【发布时间】:2023-03-18 12:31:02
【问题描述】:

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

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

这是第一个使用time_ttime(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_tclock() 的第二个程序

#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_tclock() 的第二个程序的结果

1
2 
3
4
5
the program take 0.998901 second

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

请解释第二个程序发生了什么以及两者之间的确切区别 时间()和时钟()函数?

【问题讨论】:

  • time() 实时报告(自 1970 年以来通常以秒为单位)。 clock() 报告 CPU 时间。

标签: c time.h


【解决方案1】:

在你的第一个程序中,这个:

time_t wait=sec+time(NULL);

导致wait 每次循环都发生变化,比当前时间晚一秒(在time_t 至少以秒为单位的系统上,这很常见,但不是必需的)。

在你的第二个程序中,这个:

clock_t wait=sec*CLOCKS_PER_SEC;

每次执行时都有相同的值,因为sec 的值永远不会改变。因此,在您的第二个程序中,循环将在第一次迭代时等待,直到程序开始后一秒钟,并且在随后的迭代中将永远不会再等待,因为自程序启动以来已经过去了超过一秒钟,clock() &lt; wait 将永远不会再真的。

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

clock_t wait=sec*CLOCKS_PER_SEC;

到:

clock_t wait = i * CLOCKS_PER_SEC;

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

【讨论】:

  • 我想再问一次。我将时钟的值分配给新变量clock_t now=clock,然后我将while循环更改为
  • 我想再问一次。我将clock() 的值分配给名为now 的新变量,如下所示:clock_t now=clock() 然后我更改了while 循环while(now &lt; wait)。这样做之后,程序能够运行,但无法在每次迭代中显示整数值。 clock()' is the same as new variable now`的值是多少?
  • 你真的需要问一个新问题,我真的无法理解你的问题。如果您执行clock_t now = clock(),那么显然now 的值等于当时clock() 的返回值。但是一纳秒之后——或者无论你的系统上clock() 的分辨率是多少——它都不会,因为clock() 会继续前进,但now 不会。
猜你喜欢
  • 2017-08-04
  • 2012-03-31
  • 2012-10-31
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多