2015-11-13 2 views
0

Я пытался измерить время, прошедшее в программе на C, используя функцию часов, но всякий раз, когда я пытаюсь напечатать любые значения часов, я возвращаюсь 0. Например :Получение времени, прошедшего в программе на C с использованием часов()

clock_t time1, time2; 
    time1 = clock(); 
    printf("Time 1 is %d.\n", (int)time1); 
    sleep(2); 
    time2 = clock(); 
    printf("Time 2 is %d.\n", (int)time2); 

в обоих случаях time1 и time2 распечатать как 0. у меня есть ощущение, что это потому, что я использую неправильный тип в Printf, но каждый тип я видел, кажется, не работает для меня. Я использовал% Lf,% ld,% f. Может ли кто-нибудь еще выявить проблему здесь?

EDIT: Я попытался большинство из упомянутых типов в этой теме: What’s the correct way to use printf to print a clock_t? Я даже пытался uintmax_t, но без возможности печати p1 и p2, я не знаю, как проверить, если это проблема типа или если часы не возвращает адекватное значение.

+4

Да, вы правы в своем мышлении. На это уже был дан ответ, я верю: http://stackoverflow.com/questions/1083142/what-s-the-correct-way-to-use-printf-to-print-a-clock-t – EkcenierK

+0

Я получаю вывод при использовании '% d ... (int)', '% llu ... (unsigned long long)' или '% Lf ... (long double)'. Оформить заказ на этот вопрос http://stackoverflow.com/questions/9871071/why-c-clock-returns-0 – evading

+0

Это может быть конкретная ОС. И 'clock' в лучшем случае возвращает микросекунды процессора, поэтому вам нужно вычисление, которое ест какой-то процессор. В Linux см. [Время (7)] (http://man7.org/linux/man-pages/man7/time.7.html) –

ответ

1

От cplusplus.com

программы Clock Возвращает время процессора, используемых программой.

Возвращаемое значение выражается в тактах, которые являются единицами времени постоянной, но системы конкретной длины (с соотношением CLOCKS_PER_SEC тактов в секунду).

Эпоха, используемая в качестве ссылки по часам, различается между системами, но это , связанная с выполнением программы (как правило, ее запуск). Чтобы вычислить фактическое время обработки программы, значение, возвращаемое часами , должно сравниваться со значением, возвращенным предыдущим вызовом к той же функции .

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

Попробуйте добавить цикл while от 0 до чего-то большого и прирастить изменчивую переменную внутри него, прежде чем звонить clock() во второй раз.

+0

Я назвал sleep (2), так что это не должно быть проблемой, правильно? –

+0

сон, вероятно, дает, чтобы ваша программа не потребляла никакого процессора. Почему бы просто не попробовать цикл while? – evading

Смежные вопросы