在网上查了一下,基本上都使用GetSystemTimes函数来取得当前CPU时间的,但是这个函数要到Windows XP SP1才有,在之前版本的Windows下无法使用。
上网搜了一下老外的文章,发现内部函数NtQuerySystemInformation可以取得当前CPU时间,而且各NT版本通用。
以下是我写的一个显示CPU使用率的代码:
#include <windows.h>
#include <Winternl.h>
#include <stdio.h>
#define MAKE_INT64( l, h ) ( ((INT64)(h)<<32) | (l) )
int main()
{
SYSTEM_INFO SystemInfo;
GetSystemInfo( &SystemInfo );
UINT32 nProcessorCount = SystemInfo.dwNumberOfProcessors; // CPU数量
NTSTATUS (WINAPI *pNtQuerySystemInformation)(
_In_ SYSTEM_INFORMATION_CLASS SystemInformationClass,
_Inout_ PVOID SystemInformation,
_In_ ULONG SystemInformationLength,
_Out_opt_ PULONG ReturnLength
);
HMODULE hNtDll = LoadLibraryA( "ntdll.dll" );
if( hNtDll == NULL ) return printf( "LoadLibraryA: %s\n", GetOsErrorMessageA().c_str() );
pNtQuerySystemInformation &