如何获得cpu的利用率?

解决方案 »

  1.   

    在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占有率