clock() возвращает отрицательное значение в C

Я использую довольно простой код для измерения времени выполнения. Это работает хорошо, пока я не уверен, что может быть не более 20 минут. Но после (>20 минут.) Он возвращает отрицательные результаты. Я искал по всем форумам и пробовал все, например, изменение типа данных, используя long unsigned (который возвращает 0), но снова не удалось. Ниже приведен фрагмент моего кода

main()
{
    time_t start,stop;
    double time_arm;
    start = clock(); 
    /* .......  */
    stop = clock();
    time_arm=(double)(stop-start)/(double)CLOCKS_PER_SEC;

    printf("Time Taken by ARM only is %lf \n",time_arm);
}

Выходной сигнал, взятый только ARM, равен -2055.367296

Любая помощь приветствуется, спасибо заранее.

3 ответа

POSIX требует CLOCKS_PER_SEC быть 1 000 000. Это означает, что ваш счет в микросекундах - и 2 31 микросекунды - это около 35 минут. Ваш таймер просто переполнен, поэтому вы не можете получить значимые результаты, когда это произойдет.

Почему вы видите проблему через 20 минут, я не уверен - может быть, ваш CLOCKS_PER_SEC не POSIX-совместимый. В любом случае, ваша проблема - переполнение таймера. Вам нужно будет решить эту проблему по-другому - возможно, посмотрите на getrusage(2),

clock_t это long, которое является 32-битным значением со знаком - оно может содержать 2^31, прежде чем переполнится. В 32-битной системе CLOCKS_PER_SEC значение равно 1000000 [как упомянуто POSIX] clock() будет возвращать одно и то же значение почти каждые 72 минуты.

Согласно MSDN также может возвращать -1.

Истекшее время настенных часов с начала процесса (прошедшее время в секундах, умноженное на CLOCKS_PER_SEC). Если истекшее время недоступно, функция возвращает -1, приведенное как clock_t.

На примечании стороны:-

clock() измеряет процессорное время, используемое программой, и оно НЕ измеряет реальное время и clock() возвращаемое значение указывается в микросекундах.

Вы можете попробовать использовать clock_gettime() с CLOCK_PROCESS_CPUTIME_ID вариант, если вы находитесь в системе POSIX. clock_gettime() использования struct timespec чтобы вернуть информацию о времени, чтобы не страдать от той же проблемы, что и использование одного целого числа.

Другие вопросы по тегам