资源描述:
《一个小巧精致的CPU监视器.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一个小巧精致的CPU监视器2001-12-22····Yesky 我们在运行一些系统占用率比较高的程序时,为了避免出现资源不足而运行失败或者速度非常慢的情况,应该首先确定当前的CPU使用情况。我们一般是使用“系统工具”中的“资源状况”工具,它虽然比较全面和易用,但是自身却又消耗了较多资源,而且它的那些附属的功能都是我们所不需要的,因此,我们可以考虑自己编程实现对CPU资源状况的监视。笔者经过一番探索,开发了一个小巧精致的CPU监视器,它不仅界面友好,而且占用资源极少,确实可以取代windows的“资源状况”程序。 (一)编程原理; CPU的资源占
2、用状况被记载在注册表的项目HKEY_DYN_DATAPerfStatsStatData分支“KERNELCPUUsage"中,通过周期性的读取该键的键值,并且将参数传递到我们自己制作的监视器界面中,使之相应的变化,这就可以即时反映出CPU的使用状况了。本文程序中的关键是相关键值的读取和反映输出到监视器上。 (二)编程实践; (1)设计程序界面; 为了达到较小CPU占有率,必须将应用程序设计的既能够全面反映问题,又能够尽量的小。首先建立一个标准exe工程,将窗体命名为frmmain,borderstyle属性为3-fixed,caption属
3、性为空白,添加一个frame控件“frame1”,caption属性为空白,添加picturebox控件,前景色为绿色,背景色为浅红色,添加一个定时器控件“timer”,interval设置为100,enabled为true,其他的属性采用系统的默认值即可,调整窗体和控件到适当位置和适当大小,效果如图2所示即可。 双击窗体frmmain,写入以下代码: OptionExplicit PrivateConstLP-HT-CAPTION=2 PrivateConstWM-NCLBUTTONDOWN=&HA1 PrivateDeclareFunct
4、ionReleaseCaptureLib“user32"()AsLong PrivateDeclareFunctionSendMessageLib“user32"Alias“SendMessageA"(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong PrivateCPUAsNewCPUUsage PrivateAvgAsLong PrivateSumAsLong PrivateIndexAsLong PrivateSubForm_Load() Me.
5、Caption=App.Title‘初始化应用程序标题栏 CPU.InitCPUUsage EndSub PrivateSubForm_QueryUnload(CancelAsInteger,UnloadModeAsInteger)‘程序结束前关闭定时器和释放内存 Timer.Enabled=False SetCPU=Nothing Cancel=0 EndSub PrivateSubFrame1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)‘用左键可以拖动程
6、序 CallForm_MouseDown(Button,Shift,X,Y) EndSub PrivateSubpctPrg_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)‘右键单击退出程序 IfButton=2Then UnloadMe End EndIf CallForm_MouseDown(Button,Shift,X,Y) EndSub PrivateSubTimer_Timer()‘利用定时器周期性的读取资源状况 DimtmpAsLong tm
7、p=CPU.GetCPUUsage Me.Caption=App.Title&FormatPercent(tmp/100)‘ ‘在标题栏用百分比数字形式反映占用率 Sum=Sum+tmp Index=Index+1 Avg=Int(Sum/Index) pctPrg.Cls pctPrg.Line(0,0)-(tmp,18),,BF pctPrg.Line(Avg,0)-(Avg,18),&HFF pctPrg.Line(Avg+1,0)-(Avg+1,18),&HFF ‘用图式形式反映占用率 EndSub PrivateSub
8、Form_MouseDown(ButtonAsInteger,ShiftAsInteger,X