Синхронизация функции в программе на C++, работающей в Linux

Я пытаюсь рассчитать время выполнения функции моей программы на C++, используя количество времени, которое требуется для выполнения в пространстве пользователя. Я попробовал команду clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start) изнутри программы, но я боюсь, что это время процессора, а не время пользователя, которое мне действительно нужно. Время "имя программы" в этом случае не будет работать, потому что я только синхронизирую функцию. Любая помощь будет отличной. Спасибо!

3 ответа

Использовать times() функция, см.: http://linux.die.net/man/2/times

Это даст вам текущий пользователь и системное время для вашего процесса. Вы можете вызвать его при входе и выходе из подпрограммы и вычесть.

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

Вы можете использовать gettimeofday(), как показано здесь.

Добавьте эту функцию в ваш код:

#include <sys/time.h> 

long myclock()
{
    struct timeval tv;
    gettimeofday(&tv, NULL);
    return (tv.tv_sec * 1000000) + tv.tv_usec;
}

и использовать его для получения времени:

long start = myclock();

// do something
// ...

long end = myclock() - start;

std::cout << "[" << time->tm_hour << ":"<< time->tm_min << ":" << time->tm_sec << 
             "] time:" << std::setprecision(3) << end/1000000.0 << std::endl;

Попробуйте увеличить: таймер библиотеки. Это портативный и простой в использовании. Буст-таймеры отдельно дают вам время на настенных часах, время пользователя и системное время.

http://www.boost.org/doc/libs/1_53_0/libs/timer/doc/cpu_timers.html

Другие вопросы по тегам