32-битное Linux clock () переполнено - PullRequest
2 голосов
/ 08 марта 2009

Мне нужно измерить в C ++ в Linux (и других Unix-подобных системах) время ЦП (не настенные часы), затрачиваемое на длинные вычисления, поэтому я использую clock (). Проблема: в 32-битных системах это происходит примерно через 2000 или 4000 секунд.

Какой рекомендуемый обходной путь для этого?

Ответы [ 4 ]

12 голосов
/ 08 марта 2009

Вы хотите использовать 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)

1 голос
/ 09 марта 2009

Другой возможный метод - использовать дважды gettimeofday (), поскольку он возвращает мс точность.

1 голос
/ 08 марта 2009

Вам нужна точность, обеспечиваемая clock()? Если нет, вы можете использовать time() дважды и взять разницу:

time_t start, end;
double diff;

time(&start);
// Do your stuff...
time(&end);
diff = difftime(end, start);

РЕДАКТИРОВАТЬ: time() измеряет реальное время (не процессорное время), как указано в его комментарии, а также clock(). Если вы хотите измерить процессорное время, вы должны следовать советам litb и использовать getrusage().

0 голосов
/ 08 марта 2009

Получить время на постоянной основе, а также увеличивать переменную множителя int каждый раз, когда она переворачивается?

...