Вопрос

Мне нужно измерить в 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 каждый раз, когда она переворачивается?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top