在Windows 2000下取系统CPU占有率

在Windows   2000下取系统CPU占有率                                                               
   
  一、应用背景    
   
  在许多实际的应用中,需要知道系统当前CPU的占有率,以便决定是否该进行某些操作。例如在一个大型系统中,经常要完成数据备份操作,但同时要保证业务不受影响,因此一般是在系统当前的CPU占有率较低的情况下进行。  
   
      二、实现原理    
   
    如何在Windows   NT/2000下取得系统CPU的占有率呢?在微软提供给开发人员的公开API(Win32   API)中,没有提供取系统信息的API,所以必须通过本机系统服务(Native   API)来完成。Native   API是Windows用户模式中为上层Win32   API提供接口的本机系统服务。在这里用到一个本机系统服务函数NtQuerySystemInformation,这个函数为我们提供了丰富的系统信 息,同时还包括对某些信息的控制和设置。下面是这个函数的原型:    
   
  typedef   NTSTATUS   (__stdcall   *NTQUERYSYSTEMINFORMATION)    
   
      (IN   SYSTEM_INFORMATION_CLASS   SystemInformationClass,      
   
  IN   OUT     PVOID  SystemInformation,    
   
  IN   ULONG   SystemInformationLength,    
   
  OUT   PULONG   ReturnLength     OPTIONAL);    
   
  NTQUERYSYSTEMINFORMATION   NtQuerySystemInformation;    
   
          从中可以看到,SystemInformationClass是一个类型信息,它大概提供了50余种信息,也就是我们可以通过这个函数对大约50多种的系 统信息进行探测或设置。             SystemInformation是一个LPVOID型的指针,它为我们提供需要获得的信息,或是我们需要设置的系统信息。 SystemInformationLength是SystemInformation的长度,它根据探测的信息类型来决定。至于 ReturnLength则是系统返回的数据长度,通常可以设置为空指针(NULL)。  
   
       
   
  通过该函数获得系统CPU占有率的过程如下:    
   
  1,   取出系统中CPU个数;    
   
  2,   取出当前系统时间(Ticks个数),减去原来保存的系统时间,得出从上次取值到目前的系统时间差;    
   
  3,   取出系统当前空闲时间,减去原来保存的空闲时间,得出这个时间段空闲时间    
   
  4,   用这个时间段空闲时间除以系统时间,得出这段时间系统的CPU空闲率    
   
  5,   用100-(系统的空闲率)/(CPU个数)所得的值就是CPU占有率

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值