我可以得到一个C ++代码来读取Windows perfmon计数器(类别,计数器名称和实例名称)?
在c#中很容易,但我需要c ++代码。
谢谢
正如Doug T.之前指出的那样,我之前发布了一个帮助类来查询性能计数器的值。 该类的用法非常简单,您只需提供性能计数器的字符串即可。 http://askldjd.wordpress.com/2011/01/05/a-pdh-helper-class-cpdhquery/
但是,我在博客上发布的代码在实践中已经被修改。 从你的评论看来,你似乎只想查询一个领域。
在这种情况下,请尝试将以下函数添加到我的CPdhQuery类。
double CPdhQuery::CollectSingleData() { double data = 0; while(true) { status = PdhCollectQueryData(hQuery); if (ERROR_SUCCESS != status) { throw CException(GetErrorString(status)); } PDH_FMT_COUNTERVALUE cv; // Format the performance data record. status = PdhGetFormattedCounterValue(hCounter, PDH_FMT_DOUBLE, (LPDWORD)NULL, &cv); if (ERROR_SUCCESS != status) { continue; } data = cv.doubleValue; break; } return data; }
例如为了得到处理器时间
counter = boost::make_shared<CPdhQuery>(std::tstring(_T("\\Processor Information(_Total)\% Processor Time")));
要获取文件读取字节数/秒:
counter = boost::make_shared<CPdhQuery>(std::tstring(_T("\\System\\File Read Bytes/sec")));
要获得%提交的字节:
counter = boost::make_shared<CPdhQuery>(std::tstring(_T("\\Memory\\% Committed Bytes In Use")));
要获取数据,请执行此操作。
double data = counter->CollectSingleData();
我希望这有帮助。
艾伦
一些常用的性能值有API调用来直接获取它们。 例如,总处理器时间可以从GetSystemTimes获得,您可以自己计算百分比。
如果这不是一个选项,那么Performance Data Helper库为性能数据提供了一个适度简单的接口。