擷取記憶體
MEMORYSTATUSEX 函數原型:
typedef struct _MEMORYSTATUSEX {
DWORD dwLength;
DWORD dwMemoryLoad;
DWORDLONG ullTotalPhys;
DWORDLONG ullAvailPhys;
DWORDLONG ullTotalPageFile;
DWORDLONG ullAvailPageFile;
DWORDLONG ullTotalVirtual;
DWORDLONG ullAvailVirtual;
DWORDLONG ullAvailExtendedVirtual;
} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
MEMORYSTATUSEX statex;
statex.dwLength = sizeof(statex);
GlobalMemoryStatusEx(&statex);
DWORDLONG physical_memory = statex.ullTotalPhys / (1024 * 1024);
DWORDLONG virtual_memory = (DWORD)statex.ullAvailVirtual / (1024 * 1024);
DWORDLONG usePhys = physical_memory - (statex.ullAvailPhys / (1024 * 1024));
float percent_memory = (float)usePhys / (float)physical_memory;
cout << "記憶體使用率: ";
printf("%.2f", percent_memory * 100);
cout << "%" << endl;
cout << "實體記憶體: " << physical_memory << " MB" << endl;
cout<<"虛拟記憶體: " << virtual_memory << " MB" << endl;
計算cpu:
__int64 CompareFileTime(FILETIME time1, FILETIME time2) //filetime到const filetime的轉換函數
{
__int64 a = time1.dwHighDateTime << 32 | time1.dwLowDateTime;
__int64 b = time2.dwHighDateTime << 32 | time2.dwLowDateTime;
return (b - a);
}
int main()
{
double cpu;
double idle, kernel, user;
FILETIME idleTime1, idleTime2;
FILETIME kernelTime1, kernelTime2;
FILETIME userTime1, userTime2;
GetSystemTimes(&idleTime1, &kernelTime1, &userTime1);
Sleep(50);
GetSystemTimes(&idleTime2, &kernelTime2, &userTime2);
idle = (double)CompareFileTime(idleTime1, idleTime2);
kernel = (double)CompareFileTime(kernelTime1, kernelTime2);
user = (double)CompareFileTime(userTime1, userTime2);
if (kernel + user == 0)
{
cpu = 0.0;
}
else
{
cpu = (double)((kernel + user - idle) * 100 / (kernel + user)); //(總的時間-空閑時間)/總的時間=占用cpu的時間就是使用率
}
cout << "cpu使用率:";
printf("%.2f", cpu);
cout << "%" << endl;
return 0;
}