2011-09-07 81 views
1

我的多线程应用程序(C++)使用pthreads。应用程序自动生成线程并按需重新使用线程,并允许线程在空闲时间过长时被取消。如何以编程方式从工作线程获取父线程和同级线程的CPU利用率?

我已经放入了一个“特殊线程”来捕获用于查看应用程序性能的统计数据,以适应不同的场景。

我不能等待进程退出,知道使用了多少CPU。

尝试使用这起特殊的线程,但结果似乎并没有PS &顶部的输出相匹配:

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 

你不错的黑客,能告诉我,如果有更好的方式来做到这一点,或上述是正确的方法,而我实际上错过了别的东西?

在此先感谢。

+4

你的代码看起来很好。唯一的一点是'ru.ru_utime.tv_usec/1000000'及其双胞胎是整数部分,而周围的代码表明浮点部分可能已经被打算。尽管如此,这并不能解释测量时间中的任何不小的差异。 – NPE

回答

0

如果这是在Linux上,您可以使用特殊的/ proc文件系统来查找关于您的进程的各种有趣的信息。我不是专家,但我很确定CPU使用统计在那里。

0

好的我明白了!

我上面发布的代码是相当正确的。 我的困惑只是由不正确的观察造成的。