C 固定时间运行循环:计数器在每次运行时返回不同的数字
我试图在一段特定的时间内运行一个循环。在此期间,设置一个计数器变量并将其递增1。目标是查看运行期间计数器变量的最终值。我希望在相同的运行周期内得到相同的计数器值。看来情况并非如此。当我以相同的持续时间运行相同的循环时,计数器变量每次都返回不同的数字。我从你那里借用了这个密码C 固定时间运行循环:计数器在每次运行时返回不同的数字,c,C,我试图在一段特定的时间内运行一个循环。在此期间,设置一个计数器变量并将其递增1。目标是查看运行期间计数器变量的最终值。我希望在相同的运行周期内得到相同的计数器值。看来情况并非如此。当我以相同的持续时间运行相同的循环时,计数器变量每次都返回不同的数字。我从你那里借用了这个密码 #包括 #包括 #包括 内部主(空) { 时间等待; 时间\u t开始=时间(空); time\u t seconds=1;//此时间过后结束循环 endwait=开始+秒; int计数器=0; 而(1){ 如果(开始
#包括
#包括
#包括
内部主(空)
{
时间等待;
时间\u t开始=时间(空);
time\u t seconds=1;//此时间过后结束循环
endwait=开始+秒;
int计数器=0;
而(1){
如果(开始<结束等待){
计数器=计数器+1;
开始=时间(空);
}
其他的
打破
}
printf(“计数器值:%d”,计数器);
返回0;
}
不同运行时的输出:
计数器值:99742750
计数器值:30134682
计数器值:30596672
所以,我的问题是
time()
函数应返回自历元以来的时间值(以秒为单位)
:
返回自1970年1月1日午夜起经过的秒数,或在发生错误时返回-1
进程中对time()
的第一次调用实际上是在一秒钟内的一个随机时刻发生的,然后循环运行,直到time()
的返回值发生变化
因此,您的循环将运行一些随机时间长度,从一秒钟的一小部分一直到大约一整秒钟。循环中对time()
的第一次调用可能返回一个值,该值导致循环结束,或者循环可能会运行大约一整秒钟。或者两者之间的任何时间长度
这是假设你的计算机上没有其他运行。这可能也将改变您的结果。在POSIX系统上,以秒为单位返回时间:
time()
函数应返回自历元以来的时间值(以秒为单位)
:
返回自1970年1月1日午夜起经过的秒数,或在发生错误时返回-1
进程中对time()
的第一次调用实际上是在一秒钟内的一个随机时刻发生的,然后循环运行,直到time()
的返回值发生变化
因此,您的循环将运行一些随机时间长度,从一秒钟的一小部分一直到大约一整秒钟。循环中对time()
的第一次调用可能返回一个值,该值导致循环结束,或者循环可能会运行大约一整秒钟。或者两者之间的任何时间长度
这是假设你的计算机上没有其他运行。这可能也会改变您的结果。当此程序运行时,您的计算机还做什么?如果您检查时间的定义,或者甚至使用流行的搜索引擎搜索c时间,它是什么数据类型?然后计算一下启动程序后的下一秒是什么时候,然后程序就会退出。你不打算这样做。首先,由于Andrew Henle在回答中解释的原因,每个循环不会运行相同的时间。第二,即使时间相同,迭代次数也不会因为CPU电源管理、缓存活动、网络中断和其他一些不可预知的事情而改变。当这个程序运行时,您的计算机还做什么?如果您检查时间的定义,或者甚至使用流行的搜索引擎搜索c时间,它是什么数据类型?然后计算一下启动程序后的下一秒是什么时候,然后程序就会退出。你不打算这样做。首先,由于Andrew Henle在回答中解释的原因,每个循环不会运行相同的时间。其次,即使时间量相同,迭代次数也不会因为CPU电源管理、缓存活动、网络中断和其他一些不可预测的事情而增加。
#include <stdio.h>
#include <time.h>
#include <unistd.h>
int main(void)
{
time_t endwait;
time_t start = time(NULL);
time_t seconds = 1; // end loop after this time has elapsed
endwait = start + seconds;
int counter =0;
while (1){
if (start < endwait){
counter=counter+1;
start = time(NULL);
}
else
break;
}
printf("Counter Value: %d", counter);
return 0;
}