2010-06-19 4 views
0

Я пытаюсь подсчитать выполнение функции в моем коде (это занимает больше часа), и я использую clock(), но я получаю некоторые ошибки, поскольку время, рассчитанное является отрицательным. Я делаю вот так:C++ подсчет времени выполнения ошибки

long double time; 
clock_t start, t_end; 

t_start = clock(); 
algorithm->execute(); 
t_end = clock(); 

time = ((long double) t_end - t_start)/CLOCKS_PER_SEC; 

cout << time << endl; 

Я что-то не так?

+0

Должно быть: 'clock_t t_start'. Там 't_' отсутствует. –

+1

21 вопрос, 0 ответов, 0 голосов? – KevenK

ответ

1

Вы проверили, чтобы ни один из звонков на clock() не возвращал -1?

Часы() возвращает время процессора, так как программа начала, или - 1, если эта информация недоступна.

Другой подход делает это:

#include <time.h> 

time_t start, end; 
time(&start); 
algorithm->execute(); 
time(&end); 
double diff = difftime(end, start); 
+0

Я думаю, что этот подход не показывает милисекунды .. Мне они нужны – dmessf

+3

Ах, не ожидал, что вам понадобится миллисекунды, когда потребуется больше часа. –

0

Я не уверен на 100%, но вы бросили только t_end на длинный двойной ???

это не должно быть:

((long double)t_end - (long double)t_start)/CLOCKS_PER_SEC 

или

((long double)(t_end - t_start))/CLOCKS_PER_SEC 

???

2

CLOCKS_PER_SEC - 1000000, а clock() возвращает подписанное 32-битное значение, поэтому он будет отрицательным после примерно 36 минут и завернется примерно через 72 минуты.

См. http://www.guyrutenberg.com/2007/09/22/profiling-code-using-clock_gettime для получения подробной информации о том, как измерять длительное время выполнения.

+0

Итак .. через 72 минуты он «перезагружается»? – dmessf

+0

'CLOCKS_PER_SEC' не обязательно 1000000, это количество тактов в секунду. Это может быть любое число. Кроме того, 'clock()' возвращает 'clock_t', который является только типом, способным отображать количество меток. Это не обязательно подписанный или неподписанный, или любой бит-счет. – GManNickG

+0

@GMan - Вы более или менее корректны. Posix требует, чтобы CLOCKS_PER_SEC составлял 1000000, так что это будет иметь место для Linux (и большинства версий Unix), но может и не быть в случае несоответствующих систем. Я понимаю, что VC++ на Win32 использует значение 1000. – Dipstick

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