Как программно получить загрузку ЦП родительским и дочерним потоками из рабочего потока?

Мое многопоточное приложение (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 ответа

Ладно, я понял!

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

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

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