我在说说如何知道计数器的描述信息(可是中文的哦!),也就是每个计数器都代表什么含义?干什么用的?要知道每个计数器描述信息需要用到PdhGetCounterInfo函数(都是在pdh开头的API中打转)。
*/
// 基本步骤如下:
// 1.格式化某一个计数器地址(字符串)
/*
在这里需要说明一下:有很多计数器是没有实例的。有实例和没有实例的格式化形式略有不同。
比如:
(有实例的)获取当前写入操作时传送到磁盘上的字节速度:需要用到”PhysicalDisk“计数器对象、该计数器对象下的"Disk Write Bytes/sec"计数器、以及计数器实例(在我的机子上主硬盘的实例为 "0 C: D: E: F:" ) ,那么获取我传送到主硬盘上的字节速度的计数器地址为 : "\PhysicalDisk("0 C: D: E: F:")\Disk Write Bytes/sec" 。
(无实例的)获取本计算机自上次启动后已经运行的时间(单位秒):需要用到"System"计数器对象、盖计数器对象下的"System Up Time"计数器、无实例,那么这个地址为: "\System\System Up Time" 。
// 2.创建计数器PdhAddCounter
// 3.分配接收描述信息的缓冲区
// 4.获取描述信息
*/
// 以下是程序实现:
__try { // 创建计数器 pdhStatus = PdhAddCounter ( hQuery , _TEXT ( "\\System\\System Up Time" ) , 0 , pCounterHandle ) ; if ( pdhStatus != ERROR_SUCCESS ) { __leave ; } 分配接收描述信息的缓冲区DWORD dwCounterBuff ; BYTE byCounterBuff [ sizeof ( PDH_COUNTER_INFO ) + sizeof ( TCHAR ) * 2048 ] ; dwCounterBuff = sizeof ( byCounterBuff ) ; 获取描述信息pdhStatus = PdhGetCounterInfo ( * pCounterHandle , TRUE , & dwCounterBuff , ( PPDH_COUNTER_INFO ) byCounterBuff ) ; if ( pdhStatus != ERROR_SUCCESS ) { __leave ; } PDH_COUNTER_INFO pdhCounterInfo = * ( PPDH_COUNTER_INFO ) byCounterBuff ; // 有关PDH_COUNTER_INFO结构的信息请参阅MSDN // PDH_COUNTER_INFO结构中包含了很多关于计数器的信息,其中szExplainText为计数器描述信息 // pdhCounterInfo.szExplainText } __finally { if ( AbnormalTermination () ) { // 如果失败 } else { // 如果成功 } } /* 至此,关于性能计数器的简单介绍到此完毕。前面啰里啰唆说一大串,主要是考虑到刚接触vc不久的朋友,如果本文能对他们有帮助我将不胜荣幸。略有vc编程经验的人肯定对此文嗤之以鼻,希望看在广大初学者的份上(包括我)请不要言语攻击我。 希望有经验的朋友多提宝贵意见、多斧正。 最后说明: 1.本文采用的是UNICODE编码,其中用到了一些宏,如果要不加修改直接通过编译请在编译器中选择UNICODE编码,并在头文件中添加 #include |
正在阅读:简介VC下使用Windows性能计数器简介VC下使用Windows性能计数器
2005-04-13 15:08
出处:PConline
责任编辑:linjixiong
键盘也能翻页,试试“← →”键