C 固定时间运行循环:计数器在每次运行时返回不同的数字

C 固定时间运行循环:计数器在每次运行时返回不同的数字,c,C,我试图在一段特定的时间内运行一个循环。在此期间,设置一个计数器变量并将其递增1。目标是查看运行期间计数器变量的最终值。我希望在相同的运行周期内得到相同的计数器值。看来情况并非如此。当我以相同的持续时间运行相同的循环时,计数器变量每次都返回不同的数字。我从你那里借用了这个密码 #包括 #包括 #包括 内部主(空) { 时间等待; 时间\u t开始=时间(空); time\u t seconds=1;//此时间过后结束循环 endwait=开始+秒; int计数器=0; 而(1){ 如果(开始

我试图在一段特定的时间内运行一个循环。在此期间,设置一个计数器变量并将其递增1。目标是查看运行期间计数器变量的最终值。我希望在相同的运行周期内得到相同的计数器值。看来情况并非如此。当我以相同的持续时间运行相同的循环时,计数器变量每次都返回不同的数字。我从你那里借用了这个密码

#包括
#包括
#包括
内部主(空)
{
时间等待;
时间\u t开始=时间(空);
time\u t seconds=1;//此时间过后结束循环
endwait=开始+秒;
int计数器=0;
而(1){
如果(开始<结束等待){
计数器=计数器+1;
开始=时间(空);
}
其他的
打破
}
printf(“计数器值:%d”,计数器);
返回0;
}
不同运行时的输出:

计数器值:99742750

计数器值:30134682

计数器值:30596672

所以,我的问题是

  • 如何在固定循环时间内获得相同的计数器变量

  • 我试图将变量seconds设置为小于1,但结果为0。那么,我如何用分数来设置这个时间呢

  • 提前感谢。

    在POSIX系统上,以秒为单位返回时间:

    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;
    }