2011-09-07 62 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

好的我明白了!

我上面發佈的代碼是相當正確的。 我的困惑只是由不正確的觀察造成的。