2011-02-25 161 views
0

我想要獲得我的(Delphi XE)應用程序中每個(最多200個)線程的CPU利用率。爲此做準備,我傳遞給PdhExpandWildCardPath一個字符串'\Thread(myappname/*)\% Processor Time'。但是(在Win7/64上)從該函數返回的緩衝區爲系統中運行的每個線程返回一個字符串,換句話說,它似乎已經將輸入看作是'\Thread(*/*)\% Processor Time'。這是意想不到的。當我隨後擴展字符串以獲得「ID線索」時,會發生同樣的情況。PdhExpandWildCardPath返回太多路徑

很明顯,我可以過濾應用程序名稱上的結果字符串,只添加我需要的計數器,但這需要數百個子字符串掃描。我誤解了通配符是如何工作的?

+0

僅僅枚舉你自己的進程中的線程和構建這些名字就不那麼容易了嗎? – 2011-02-25 11:36:14

+0

爲什麼不爲每個線程使用GetThreadTimes? – Misha 2011-02-25 13:48:33

+0

@David:懶惰,我已經完成了通配符代碼。但是,謝謝,我現在已經改變了我的代碼,首先枚舉線程,並且更快。而且我仍然認爲通配符擴展很奇怪。 – frogb 2011-02-25 15:36:54

回答

0

晚了,但我已經打了相同的牆壁,也許別人需要它:

這是:'\Thread(myappname*)\% Processor Time'

特別是隨着ProcessNameFormat設置爲2有用和ThreadNameFormat在'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfProc\Performance'

設置爲2

對於ProcessNameFormat = 2 - >link,同樣適用於ThreadNameFormat,儘管我找不到任何類型的文檔。

+0

對我來說太晚了,但是事先感謝我再次需要它時! – frogb 2016-01-19 16:04:03