有一个关于这个here的类似帖子,我试图自己实现它。即尝试使用c ++库获取服务器中运行的线程数。
我可以准确知道COUNTER_PATH是什么吗? (例如给定link中的“\ Process(* _)\ Thread Count”)?使用该字符串和pid编号创建字符串是什么意思?
以下是我到目前为止所写的内容,但没有真正理解任何内容:
#include <windows.h>
#include <pdh.h> //and suppose there're other libraries as necessary...
CONST PWSTR COUNTER_PATH = L"\Process(*)\Thread Count";
int returnNumThreads()
{
HQUERY hQuery = NULL;
HCOUNTER hCounter;
DWORD counterType;
PDH_FMT_COUNTERVALUE counterValue;
PWSTR Paths = NULL;
PDH_STATUS pdhStatus = PdhOpenQuery(NULL, 0, &hQuery);
pdhStatus = PdhAddCounter(hQuery, COUNTER_PATH, 0, &hCounter);
pdhStatus = PdhCollectQueryData(hQuery);
pdhStatus = PdhGetFormattedCounterValue(hCounter,
PDH_FMT_LONG,
&counterType,
&counterValue);
return counterValue.longValue;
}
// **Here, I removed all the error checking codes such as
// "if (pdhStatus != ERROR_SUCCESS){...}" for better readability
**此外,上面链接中给出的解决方案是扩展通配符路径,但是当我检查PdhAddCounter page时,它说:“如果计数器路径包含通配符,则所有计数器名称都匹配通配符添加到查询中,“所以我不确定是否真的需要扩展。
我一直在关注various examples,但我还不确定我是在正确创建查询还是仍然是COUNTER_PATH。有人可以给我一个解释吗?
答案 0 :(得分:0)
PdhAddCounter
将命名计数器添加到打开的查询中。 L"\Process(*)\Thread Count"
就是这样一个名字。它被认为是一个“路径”名称,因为它的语法是分层的(部分由\
分隔),类似于文件路径。
通配符表示您要为Process(Foo)
,Process(Bar)
等添加线程计数器,以便将所有进程的线程总数加在一起。 (如果您正在运行两个foo.exe副本,则第二个是\Process(Foo#1)