2011-02-25 121 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