Как программно получить загрузку ЦП родительским и дочерним потоками из рабочего потока? - PullRequest
1 голос
/ 07 сентября 2011

Мое многопоточное приложение (c ++) использует pthreads. Приложение автоматически генерирует потоки и повторно использует их по требованию и позволяет отменять поток, если он слишком долго простаивает.

Я поместил «специальный поток» для сбора статистических данных, чтобы посмотреть на производительность приложения при различных сценариях.

Я не могу дождаться завершения процесса, чтобы узнать, сколько ЦП было использовано.

Попробовал использовать это из специальной ветки, но результаты не соответствовали выводу ps & top:

struct rusage ru;
    double utime, stime, ttime ;

if (getrusage(RUSAGE_SELF, &ru) == -1)
    return;

utime = ru.ru_utime.tv_sec + ( ru.ru_utime.tv_usec / 1000000 ); // Total CPU time used in user space
stime = ru.ru_stime.tv_sec + ( ru.ru_stime.tv_usec / 1000000 ); // Total CPU time used in kernel space
ttime = utime + stime; // Total CPU Utilization

Можете ли вы хорошие хаки, скажите мне, если есть лучший способ сделать это, или выше является правильным методом, и я на самом деле упускаю что-то еще?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 17 ноября 2011

ОК, я понял!

Код, который я разместил выше, довольно корректен. Моя путаница была вызвана только неправильным наблюдением.

0 голосов
/ 30 сентября 2011

Если это в Linux, вы можете использовать специальную файловую систему / proc, чтобы узнать все виды интересной информации о ваших процессах. Я не эксперт, но я вполне уверен, что где-то там статистика использования процессора.

...