gpt4 book ai didi

c - Clock_t 和 time_t 或 time(NULL) 和 Clock() 之间的区别

转载 作者:行者123 更新时间:2023-11-30 17:27:21 28 4
gpt4 key购买 nike

我只是编写了一个 C 程序,每隔一秒打印一次整数值作为练习,该程序在等待一秒后打印整数,然后再打印下一个整数,因此程序需要 5 秒才能完成执行。我正在使用 clock_ttime() 作为计时器,它可以工作,但是当我使用 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() 和clock() 函数?

最佳答案

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

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;

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

关于c - Clock_t 和 time_t 或 time(NULL) 和 Clock() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26434179/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com