正在阅读:简介VC下使用Windows性能计数器简介VC下使用Windows性能计数器

2005-04-13 15:08 出处:PConline 作者:wlzqi 责任编辑:linjixiong
我在说说如何知道计数器的描述信息(可是中文的哦!),也就是每个计数器都代表什么含义?干什么用的?要知道每个计数器描述信息需要用到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 (略作修改就可在ANSI编码下运行)   2.本文用到的__try {} __finally {} 只是结构化异常处理SEH,可以不要。   3.需要本文例子工程及源代码的朋友请到我的主页上来下载 www.Clock.5888.com   4.性能计数器只能用在2000/Xp系统(2003没试过)   5.本文代码编译环境 Windows 2000 + VC.net   6.欢迎转载,转载请注明文章作者和出处。   */
键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品