15.2.2 使用性能计数器对象
下面介绍如何使用性能计数器,其使用的基本步骤如下所示。
PdhOpenQuery:打开计数器,并为其句柄分配空间。
PdhAddCounter:添加感兴趣的计数器。
PdhCollectQueryData:收集数据。
PdhGetFormattedCounterValue:获取计数器的数值。
PdhCloseQuery:关闭计数器,释放计数器句柄空间。
以上函数一般包含在pdh.h头文件和库文件Pdh.lib中,下面将详细地介绍这些函数。
(1)PdhOpenQuery()函数用于打开计数器,为计数器句柄分配空间,其原型如下所示。
- PDH_STATUS PdhOpenQuery(
- LPCTSTR szDataSource,
- DWORD_PTR dwUserData,
- HQUERY *phQuery
- );
代码中的szDataSource一般设置为NULL值;dwUserData一般设置为NULL值;phQuery用于接收指向计数器的句柄。该函数可以成功地返回ERROR_SUCCESS。
(2)PdhAddCounter()函数用于添加感兴趣的计数器,其原型如下:
- PDH_STATUS PdhAddCounter(
- HQUERY hQuery
- LPCTSTR szFullCounterPath,
- DWORD_PTR dwUserData
- HCOUNTER *phCounter
- )
代码中的hQuery是由PdhOpenQuery获取的计数器对象句柄。szFullCounterPath由计数器对象、实例及计数器组成的字符串,比如\\Processor(0)\\%Processor Time的作用是获取当前计算机的第一个处理器占用率,其组成为计数器对象Processor、实例0、计数器%Processor Time。dwUserData是用户自定义数据,一般设置为NULL值;phCounter用于接收创建的计数器句柄。
(3)PdhCollectQueryData()函数用于收集感兴趣的数据,其原型如下:
- PDH_STATUS PdhCollectQueryData(
- HQUERY hQuery
- );
代码中的hQuery是由PdhOpenQuery获取的计数器对象句柄。
(4)PdhGetFormattedCounterValue()函数用于获取计数器的数值,其原型如下:
- PDH_STATUS PdhGetFormattedCounterValue(
- HCOUNTER hCounter,
- DWORD dwFormat,
- LPDWORD lpdwType,
- PPDH_FMT_COUNTERVALUE pValue
- );
代码中的hCounter是由PdhAddCounter获取的计数器句柄;dwFormat可以取的值有PDH_FMT_DOUBLE、PDH_FMT_LARGE、PDH_FMT_LONG;lpdwType用于接收缓冲的计数器类型;pValue属于PDH_FMT_COUNTERVALUE结构类型,用于存放获取到的计数值。该函数可以成功地返回ERROR_SUCCESS。