【发布时间】:2011-11-12 07:11:39
【问题描述】:
我的多线程应用程序 (c++) 使用 pthreads。应用程序会自动生成线程并按需重用它们,并允许线程在空闲时间过长时取消。
我已经放置了一个“特殊线程”来捕获统计数据,以便在遇到不同情况时查看应用程序的性能。
我等不及进程退出,想知道使用了多少 CPU。
尝试在特殊线程中使用这个,但结果似乎与 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
各位高手能否告诉我是否有更好的方法,或者上面是正确的方法,而我实际上还缺少其他东西?
提前致谢。
【问题讨论】:
-
您的代码看起来不错。唯一的小问题是
ru.ru_utime.tv_usec / 1000000和它的孪生是整数除法,而周围的代码表明浮点除法可能是有意的。不过,这并不能解释测量时间中的任何重大差异。
标签: c++ linux pthreads cpu-usage getrusage