项目背景:在评估软件资源使用率的时候,需要统计CPU和内存最大使用率,因此需要监测软件运行工程中的CPU和内存使用率的变化,并记录最大值

1.内存统计会比较简单,只需要查询电脑中最大内存,以及实时内存使用情况

 1 #include <windows.h>
 2 #include <stdio.h>
 3 #include <conio.h>
 4 #include<iostream>
 5 double FileTimeToDouble(FILETIME* pFiletime)
 6 {
 7     return (double)((*pFiletime).dwHighDateTime * 4.294967296E9) + (double)(*pFiletime).dwLowDateTime;
 8 }
 9 
10 double m_fOldCPUIdleTime;
11 double m_fOldCPUKernelTime;
12 double m_fOldCPUUserTime;
13 
14 
15 
16 BOOL Initialize()
17 {
18     FILETIME ftIdle, ftKernel, ftUser;
19     BOOL flag = FALSE;
20     if (flag = GetSystemTimes(&ftIdle, &ftKernel, &ftUser))
21     {
22         m_fOldCPUIdleTime = FileTimeToDouble(&ftIdle);
23         m_fOldCPUKernelTime = FileTimeToDouble(&ftKernel);
24         m_fOldCPUUserTime = FileTimeToDouble(&ftUser);
25 
26     }
27     return flag;
28 }
29 
30 int GetCPUUseRate()
31 {
32     int nCPUUseRate = -1;
33     FILETIME ftIdle, ftKernel, ftUser;
34     if (GetSystemTimes(&ftIdle, &ftKernel, &ftUser))
35     {
36         double fCPUIdleTime = FileTimeToDouble(&ftIdle);
37         double fCPUKernelTime = FileTimeToDouble(&ftKernel);
38         double fCPUUserTime = FileTimeToDouble(&ftUser);
39         nCPUUseRate = (int)(100.0 - (fCPUIdleTime - m_fOldCPUIdleTime) / (fCPUKernelTime - m_fOldCPUKernelTime + fCPUUserTime - m_fOldCPUUserTime)*100.0);
40         m_fOldCPUIdleTime = fCPUIdleTime;
41         m_fOldCPUKernelTime = fCPUKernelTime;
42         m_fOldCPUUserTime = fCPUUserTime;
43     }
44     return nCPUUseRate;
45 }
46 int GetMemoryUsePercentage()
47 {
48     MEMORYSTATUSEX mstx;
49     mstx.dwLength = sizeof(mstx);
50     GlobalMemoryStatusEx(&mstx);
51     int iMemeryUsePercentage = mstx.dwMemoryLoad;
52     int iTotalPhysMB = mstx.ullTotalPhys / 1024 / 1024;
53     int iAvailPhysMB = mstx.ullAvailPhys / 1024 / 1024;
54     int iTotalPageFileMB = mstx.ullTotalPageFile / 1024 / 1024;
55     int iAvailPageFileMB = mstx.ullAvailPageFile / 1024 / 1024;
56     char LogBuff[128];
57     memset(LogBuff, 0, 128);
58     //sprintf(LogBuff, "MemAvailPct=%d%% Phys=%d/%d PageFile=%d/%d", iMemeryUsePercentage, iAvailPhysMB, iTotalPhysMB, iAvailPageFileMB, iTotalPageFileMB);
59     //printf("%s\n", LogBuff);
60     return iMemeryUsePercentage;
61 }
62 
63 
64 int main()
65 {
66     int maxCPUUsePercentage = 0;
67     int maxMemoryUsePercentage = 0;
68     if (!Initialize())
69     {
70         system("pause");
71         return -1;
72     }
73     else
74     {
75         while(true)
76         { 
77         Sleep(1000);
78         int CpuUseRate = int(GetCPUUseRate(
79         int MemoryUseRate = GetMemoryUsePercentage();;
80         if (CpuUseRate> maxCPUUsePercentage)
81         {
82             maxCPUUsePercentage = CpuUseRate;
83         }
84 
85         if (MemoryUseRate > maxMemoryUsePercentage)
86         {
87             maxMemoryUsePercentage = MemoryUseRate;
88         }
89 
90         std::cout << "当前CPU使用率: " << CpuUseRate <<
91             "  最大CPU使用率: "<<maxCPUUsePercentage<< "  当前内存: " << MemoryUseRate <<
92             "  最大内存:"<< maxMemoryUsePercentage << std::endl;
93 
94         }
95     }
96     return 0;
97 }
View Code

相关文章:

  • 2021-07-14
  • 2021-06-12
  • 2021-11-23
  • 2021-12-18
  • 2022-12-23
  • 2022-01-13
  • 2022-12-23
  • 2021-12-28
猜你喜欢
  • 2022-01-07
  • 2021-10-18
  • 2021-07-18
  • 2021-11-27
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案