C: Как сбросить повторное значение clock () на 0? - PullRequest
1 голос
/ 10 июля 2020

Я хотел бы знать, есть ли способ сбросить возвращаемое значение функции clock () до 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;
}

какой код мне поставить на место комментария сбросить таймер? Есть ли способ, или я неправильно подхожу к проблеме?

Ответы [ 2 ]

1 голос
/ 10 июля 2020

clock() всегда увеличивается.

Единица измерения часов - CLOCKS_PER_SEC. Одна секунда имеет CLOCKS_PER_SEC тактов.

Обратите внимание, что clock() не измеряет реальное время. clock() измеряет время, затрачиваемое процессором на ваш процесс. Если вы хотите измерять в реальном времени, используйте time() из time.h (или проверьте свою ОС, на linux вы можете использовать clock_gettime(CLOCK_MONOTONIC, ...) или CLOCK_REALTIME).

Сохраните текущие часы в Переменная. Затем сравните переменную с текущими часами.

Обычно stdout буферизуется по строке. Итак, пока вы не напишите символ новой строки, ничего не будет отображаться. Обязательно выполните грипп sh 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, потенциально могут переполняться - отличный код справится с такими угловыми случаями.

0 голосов
/ 10 июля 2020

Скорее всего, вы пытаетесь рассчитать время. Взгляните на это

#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);
}
...