32-битное Linux clock () переполнено
Вопрос
Мне нужно измерить в C ++ в Linux (и других Unix-подобных системах) время ЦП (не настенные часы), затрачиваемое на длительные вычисления, поэтому я использую clock (). Проблема: в 32-битных системах это происходит примерно через 2000 или 4000 секунд.
Какой рекомендуемый обходной путь для этого?
Решение
Вы хотите использовать getrusage
, который заполняет следующую структуру:
struct rusage {
struct timeval ru_utime; /* user time used */
struct timeval ru_stime; /* system time used */
...
};
Для завершения struct timeval
:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
Как всегда, обратитесь к man-странице за подробностями ( man getrusage
)
Другие советы
Вам нужна точность, обеспечиваемая clock ()
? Если нет, вы можете использовать time ()
дважды и взять разницу:
time_t start, end;
double diff;
time(&start);
// Do your stuff...
time(&end);
diff = difftime(end, start);
РЕДАКТИРОВАТЬ: time ()
измеряет реальное время (не процессорное время), как указано в его комментарии, а также clock () код>. Если вы хотите измерить процессорное время, вы должны следовать советам litb и использовать
getrusage ()
.
Другой возможный метод - дважды использовать gettimeofday (), поскольку он возвращает мс точность.
Получать время периодически, а также увеличивать переменную множителя int каждый раз, когда она переворачивается?