C:如何将clock()的返回值重置为0?

C: How to reset the reurn value of clock() to 0?

我想知道是否有办法将 clock() 函数的 return 值重置为 0。 我有这样的代码:

#include <stdio.h>
#include <time.h>
#include <stdbool.h>

int main()
{
    /* clock_t t1; */
    unsigned int sec = 0;
    while(true) {
        if(clock() >= 1000) {
            printf("%u seconds has passed\r", sec);
            /* reset clock()'s return value to 0 */
            sec++;
        }
    }

    return 0;
}

我应该在评论处放置什么代码来重置计时器?有什么办法,还是我处理问题的方式不正确?

我最好的猜测是你正在尝试计时 看看this

#include <time.h>
#include <stdio.h>

int main () {
   clock_t start_t, end_t, total_t;
   int i;

   start_t = clock();
   printf("Starting of the program, start_t = %ld\n", start_t);
    
   printf("Going to scan a big loop, start_t = %ld\n", start_t);
   for(i=0; i< 1000000000; i++) {
   }
   end_t = clock();
   printf("End of the big loop, end_t = %ld\n", end_t);
   
   total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
   printf("Total time taken by CPU: %f\n", total_t  );
   printf("Exiting of the program...\n");

   return(0);
}

clock() 一直在增加。

时钟单位在CLOCKS_PER_SEC。一秒有 CLOCKS_PER_SEC 个时钟。

请注意 clock() 不测量实时。 clock() 衡量处理器在您的进程中花费的时间。如果您想实时测量,请使用 time.h 中的 time()(或检查您的 OS,在 linux 上您可以使用 clock_gettime(CLOCK_MONOTONIC, ...)CLOCK_REALTIME).

将当前时钟保存在一个变量中。然后将变量与当前时钟进行比较。

通常 stdout 是行缓冲的。所以在你写一个换行符之前,什么都不会出现。如果您依赖于该行为,请确保刷新 stdout

#include <stdio.h>
#include <time.h>
int main() {
    unsigned int sec = 0;
    // we will stop the clock one second from now
    clock_t stopclock = clock() + 1 * CLOCKS_PER_SEC;
    while(1) {
        // current time is greater then the stopping time
        if (clock() > stopclock) {
            // increment stopping time by one second
            stopclock += 1 * CLOCKS_PER_SEC;
            printf("\r%u seconds has passed", sec);
            fflush(stdout);
            sec++;
        }
    }

    return 0;
}

注意:对 clock_t 类型(如 clock() + 1 * CLOCKS_PER_SEC)的计算可能会溢出 - 优秀的代码可以处理此类极端情况。