C 'часы ()' функция просто возвращает нуль

C clock() функция просто возвращает меня нуль. Я пытался использовать различные типы без улучшения... Действительно ли это - хороший способ измерить время с хорошей точностью?

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

int main()
{
    clock_t start, end;
    double cpu_time_used;

    char s[32];

    start = clock();

    printf("\nSleeping 3 seconds...\n\n");
    sleep(3);

    end = clock();

    cpu_time_used = ((double)(end - start)) / ((double)CLOCKS_PER_SEC);

    printf("start = %.20f\nend   = %.20f\n", start, end);
    printf("delta = %.20f\n", ((double) (end - start)));
    printf("cpu_time_used  = %.15f\n", cpu_time_used);
    printf("CLOCKS_PER_SEC = %i\n\n", CLOCKS_PER_SEC);

    return 0;
}
Sleeping 3 seconds...

start = 0.00000000000000000000
end   = 0.00000000000000000000
delta = 0.00000000000000000000
cpu_time_used  = 0.000000000000000
CLOCKS_PER_SEC = 1000000

Платформа: Intel 32 бита, Redhat Linux, gcc 3.4.6

17
задан Jonathan Leffler 5 May 2012 в 01:47
поделиться

5 ответов

Часы () отчеты используются время процессора. Сон () не использует время процессора. Таким образом, ваш результат, вероятно, точно правильный, просто не то, что вы хотите.

26
ответ дан 30 November 2019 в 10:58
поделиться

Призыв Сон () не будет использовать любое время процессора. Вы должны увидеть мало разницу, хотя. Я исправил ошибку «Несоответствие типа PrintF» в этой строке:

printf("start = %.20f\nend   = %.20f\n", start, end);

, и он дал разумные результаты на моей машине:

start = 1419
end   = 1485
delta = 66
cpu_time_used  = 0.000066000000000
CLOCKS_PER_SEC = 1000000

Вы можете попробовать GetTimeOfDay () , чтобы получить реальное время, проведенное запуск вашей программы.

4
ответ дан 30 November 2019 в 10:58
поделиться

Человек-часы . Это не возвращает то, что вы думаете, это. Также MAN GETTIMEOFDAY - это скорее всего, вы хотите.

6
ответ дан 30 November 2019 в 10:58
поделиться

Clock_T - это целочисленный тип. Вы не можете распечатать его с% F. См. Ответ Фреда Почему значение равно 0.

4
ответ дан 30 November 2019 в 10:58
поделиться
 printf("start = %.20f\nend   = %.20f\n", start, end);

должно быть:

 printf("start = %d\nend   = %d\n", start, end);
4
ответ дан 30 November 2019 в 10:58
поделиться