Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/41: Рейтинг темы: голосов - 41, средняя оценка - 4.68
 Аватар для wakamon
0 / 0 / 1
Регистрация: 11.12.2014
Сообщений: 14

Как получить загруженность ЦП в процентах

19.12.2014, 18:46. Показов 8430. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Пишу программу-индикатор для курсача, который определял бы загруженность памяти и процессора. Принцип работу как у Гаджета на рабочем столе. С памятью разобрался:
C++
1
2
3
4
5
6
MEMORYSTATUSEX stats;
stats.dwLength = sizeof(stats);
GlobalMemoryStatusEx(&stats);
__int64 a;
a=stats.dwMemoryLoad;
RichEdit1->Lines->Add(IntToStr(a)+"%");
А с загруженностью процессора не получается. Подскажите, может можно так же сделать, через структуры?
Или как то мониторить реестр??? (если так можно)
Изображения
 
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.12.2014, 18:46
Ответы с готовыми решениями:

Получить загруженность процессора для определенной программы
Здравствуйте, подскажите как получить загруженность памяти и процессора моей программы? Хочу проверить как разные настройки программы...

Как узнать загруженность процессора, памяти и заряд батареи?
Как узнать насколько загружен процессор и оперативная память, а также заряд аккумулятора в ноутбуке?

Как узнать загруженность процессора по процессам в процентах?
Подскажите пожалуйста скрип который получал бы список процессов и загрузку проца по ним.

8
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
20.12.2014, 00:13
Про реестр пишут, что данные получаются не верные на НЕ "древних" ОС.
А код гуглится за пару секунд (но на дельфи). Вроде как рабочий.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
const
  SystemBasicInformation = 0;
  SystemPerformanceInformation = 2;
  SystemTimeInformation = 3;
 
type
  TPDWord = ^DWORD;
 
  TSystem_Basic_Information = packed record
    dwUnknown1: DWORD;
    uKeMaximumIncrement: ULONG;
    uPageSize: ULONG;
    uMmNumberOfPhysicalPages: ULONG;
    uMmLowestPhysicalPage: ULONG;
    uMmHighestPhysicalPage: ULONG;
    uAllocationGranularity: ULONG;
    pLowestUserAddress: Pointer;
    pMmHighestUserAddress: Pointer;
    uKeActiveProcessors: ULONG;
    bKeNumberProcessors: byte;
    bUnknown2: byte;
    wUnknown3: word;
  end;
 
type
  TSystem_Performance_Information = packed record
    liIdleTime: LARGE_INTEGER; {LARGE_INTEGER}
    dwSpare: array[0..75] of DWORD;
  end;
 
type
  TSystem_Time_Information = packed record
    liKeBootTime: LARGE_INTEGER;
    liKeSystemTime: LARGE_INTEGER;
    liExpTimeZoneBias: LARGE_INTEGER;
    uCurrentTimeZoneId: ULONG;
    dwReserved: DWORD;
  end;
 
var
  NtQuerySystemInformation: function(infoClass: DWORD;
    buffer: Pointer;
    bufSize: DWORD;
    returnSize: TPDword): DWORD; stdcall = nil;
 
  liOldIdleTime: LARGE_INTEGER = ();
  liOldSystemTime: LARGE_INTEGER = ();
 
function Li2Double(x: LARGE_INTEGER): Double;
begin
  Result := x.HighPart * 4.294967296E9 + x.LowPart
end;
 
procedure GetCPUUsage;
var
  SysBaseInfo: TSystem_Basic_Information;
  SysPerfInfo: TSystem_Performance_Information;
  SysTimeInfo: TSystem_Time_Information;
  status: Longint; {long}
  dbSystemTime: Double;
  dbIdleTime: Double;
 
  bLoopAborted: boolean;
 
begin
  if @NtQuerySystemInformation = nil then
    NtQuerySystemInformation := GetProcAddress(GetModuleHandle('ntdll.dll'),
      'NtQuerySystemInformation');
 
  // get number of processors in the system
 
  status := NtQuerySystemInformation(SystemBasicInformation, @SysBaseInfo,
    SizeOf(SysBaseInfo), nil);
  if status <> 0 then
    Exit;
 
  // Show some information
  with SysBaseInfo do
  begin
    ShowMessage(
      Format('uKeMaximumIncrement: %d'#13'uPageSize: %d'#13   +
      'uMmNumberOfPhysicalPages: %d' + #13 + 'uMmLowestPhysicalPage: %d' + #13 +
      'uMmHighestPhysicalPage: %d' + #13 + 'uAllocationGranularity: %d'#13 +
      'uKeActiveProcessors: %d'#13'bKeNumberProcessors: %d'  ,
      [uKeMaximumIncrement, uPageSize, uMmNumberOfPhysicalPages,
      uMmLowestPhysicalPage, uMmHighestPhysicalPage, uAllocationGranularity,
        uKeActiveProcessors, bKeNumberProcessors]));
  end;
 
  bLoopAborted := False;
 
  while not bLoopAborted do
  begin
 
    // get new system time
    status := NtQuerySystemInformation(SystemTimeInformation, @SysTimeInfo,
      SizeOf(SysTimeInfo), 0);
    if status <> 0 then
      Exit;
 
    // get new CPU's idle time
    status := NtQuerySystemInformation(SystemPerformanceInformation,
      @SysPerfInfo, SizeOf(SysPerfInfo), nil);
    if status <> 0 then
      Exit;
 
    // if it's a first call - skip it
    if (liOldIdleTime.QuadPart <> 0) then
    begin
 
      // CurrentValue = NewValue - OldValue
      dbIdleTime := Li2Double(SysPerfInfo.liIdleTime) -
        Li2Double(liOldIdleTime);
      dbSystemTime := Li2Double(SysTimeInfo.liKeSystemTime) -
        Li2Double(liOldSystemTime);
 
      // CurrentCpuIdle = IdleTime / SystemTime
      dbIdleTime := dbIdleTime / dbSystemTime;
 
      // CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors
      dbIdleTime := 100.0 - dbIdleTime * 100.0 / SysBaseInfo.bKeNumberProcessors
        + 0.5;
 
      // Show Percentage
      Form1.Label1.Caption := FormatFloat('CPU Usage: 0.0 %', dbIdleTime);
 
      Application.ProcessMessages;
 
      // Abort if user pressed ESC or Application is terminated
      bLoopAborted := (GetKeyState(VK_ESCAPE) and 128 = 128) or
        Application.Terminated;
 
    end;
 
    // store new CPU's idle and system time
    liOldIdleTime := SysPerfInfo.liIdleTime;
    liOldSystemTime := SysTimeInfo.liKeSystemTime;
 
    // wait one second
    Sleep(1000);
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  GetCPUUsage
end;
1
 Аватар для wakamon
0 / 0 / 1
Регистрация: 11.12.2014
Сообщений: 14
20.12.2014, 10:50  [ТС]
Спасибо за код, но мне не совсем понятень delphi. Можете помочь перевести это дело?
0
120 / 142 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
20.12.2014, 12:30
Пример тут Загрузка ЦП
0
 Аватар для wakamon
0 / 0 / 1
Регистрация: 11.12.2014
Сообщений: 14
21.12.2014, 01:44  [ТС]
Воспользовавшись интернетом,свободным временем,информации с форума и нервами, попытался смастерить программу. В итоге получилось так что программа выдает очень большие результаты нагрузки. Я не совсем понимаю где я ошибся.
Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
#pragma hdrstop
#include <windows.h>
#include "Unit1.h"
#include <iostream>
//#include <string.h>
#include <vcl.h>
#include <Classes.hpp>
#include <Controls.hpp>
#include <ExtCtrls.hpp>
#include <ImgList.hpp>
#include <Menus.hpp>
#include <StdCtrls.hpp>
#define SystemProcessorTimes 8
#define MAX_PROCESSORS 32
 
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
 
 
typedef struct _SYSTEM_BASIC_INFORMATION
{
    ULONG Unknown,
    MaximumIncrement,
    PhysicalPageSize,
    NumberOfPhysicalPages,
    LowestPhysicalPage,
    HighestPhysicalPage,
    AllocationGranularity,
    LowestUserAddress,
    HighestUserAddress,
    ActiveProcessors;
    char NumberProcessors;
}SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
 
typedef struct _SYSTEM_PROCESSOR_TIMES
{
    __int64 IdleTime,
    KernelTime,
    UserTime,
    DpcTime,
    InterruptTime;
    ULONG InterruptCount;
} SYSTEM_PROCESSORS_TIMES[MAX_PROCESSORS], SYSTEM_PROCESSOR_TIMES, *PSYSTEM_PROCESSOR_TIMES;
 
typedef UINT __stdcall (*ZwQuerySystemInformation)(DWORD,void*,DWORD,DWORD*);
 
SYSTEM_INFO SYSINFO;
 
int GetProcessorsCount(void)
{
  SYSTEM_INFO SYSINFO;
  GetSystemInfo(&SYSINFO);
  return SYSINFO.dwNumberOfProcessors;
}
 
 
 
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
Color=clBlue;
TransparentColorValue=clBlue;
TransparentColor=true;
//Form1->Canvas->Brush->Color=clBlack;
//Form1->Canvas->Rectangle(10,10,20,20);
 
}
 
//---------------------------------------------------------------------------
int * cpu_usage;
__int64 temp = 0;
 unsigned int cycle_count = 0,
             count_mas = 0,
             interval = 1000;
 
 
HMODULE lib = NULL;
DWORD nowtime, oldtime, pertime, rez, curtime = 0;
SYSTEM_PROCESSORS_TIMES CurrentSysProcTimes, PreviousSysProcTimes;
 
ZwQuerySystemInformation func;
AnsiString msg = "";
 
 
 
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
cpu_usage = new int[100000];
   count_mas = 0;
 
 
 ZeroMemory(&CurrentSysProcTimes[0],sizeof(CurrentSysProcTimes));
    ZeroMemory(&PreviousSysProcTimes[0],sizeof(PreviousSysProcTimes));
 
    lib = LoadLibrary("Ntdll.dll");
 func = (ZwQuerySystemInformation)GetProcAddress(lib,"ZwQuerySystemInformation");
 
        nowtime = GetTickCount();
        pertime = nowtime - oldtime;
        curtime += pertime;
        oldtime = nowtime;
 
 
        func(SystemProcessorTimes,
              &CurrentSysProcTimes[0],
              sizeof(CurrentSysProcTimes),
              &rez);
 
      temp = 0;
       for(int j=0;j<MAX_PROCESSORS;j++)
       {
            temp += CurrentSysProcTimes[j].IdleTime - PreviousSysProcTimes[j].IdleTime;
 
       }
        temp /= 10000;
        temp /= (int) GetProcessorsCount();
 
        temp = (int) pertime - temp;
 
          if (cycle_count >= 1) {
 
        cpu_usage[count_mas] = temp / (float) pertime*100; }
 
        msg = "";
        msg += "Usage of processors is " + IntToStr(cpu_usage[count_mas]) + "%";
        Memo1->Lines->Add(msg);
        Memo1->Lines->Add("");
               Label5->Caption =IntToStr(cpu_usage[count_mas]);
        count_mas++;
 
 
           cycle_count++;
 
           memcpy(&PreviousSysProcTimes[0],
                &CurrentSysProcTimes[0],
                sizeof(PreviousSysProcTimes));
 
 
        Label2->Font->Color = clHighlight;
        Label2->Font->Size = 12;
        Label2->Font->Style=TFontStyles()<<fsBold;
 
RichEdit1->ReadOnly=false;
RichEdit1->Clear();
Timer1->Enabled;
Timer1->Interval=(1000);
 
 
 
MEMORYSTATUSEX stats;
stats.dwLength = sizeof(stats);
GlobalMemoryStatusEx(&stats);
__int64 a;
a=stats.dwMemoryLoad;
RichEdit1->Lines->Add(IntToStr(a)+" %");
 
Refresh ();
for (int i=0;i<a/10;i++)
     {
      if ((a>0)&&(a<=10)) {Canvas->Brush->Color = RGB(25.5*i,255-25.5*i,0);Canvas->Rectangle(20,130-12*i,50,140-12*i);}
      if ((a>10)&&(a<=20)) {Canvas->Brush->Color = RGB(25.5*i,255-25.5*i,0);Canvas->Rectangle(20,130-12*i,50,140-12*i);}
      if ((a>20)&&(a<=30)) {Canvas->Brush->Color = RGB(25.5*i,255-25.5*i,0);Canvas->Rectangle(20,130-12*i,50,140-12*i);}
      if ((a>30)&&(a<=40)) {Canvas->Brush->Color = RGB(25.5*i,255-25.5*i,0);Canvas->Rectangle(20,130-12*i,50,140-12*i);}
      if ((a>40)&&(a<=50)) {Canvas->Brush->Color = RGB(25.5*i,255-25.5*i,0);Canvas->Rectangle(20,130-12*i,50,140-12*i);}
      if ((a>50)&&(a<=60)) {Canvas->Brush->Color = RGB(25.5*i,255-25.5*i,0);Canvas->Rectangle(20,130-12*i,50,140-12*i);}
      if ((a>60)&&(a<=70)) {Canvas->Brush->Color = RGB(25.5*i,255-25.5*i,0);Canvas->Rectangle(20,130-12*i,50,140-12*i);}      if ((a>70)&&(a<=80)) {Canvas->Brush->Color = RGB(25.5*i,255-25.5*i,0);Canvas->Rectangle(20,130-12*i,50,140-12*i);}
      if ((a>80)&&(a<=90)) {Canvas->Brush->Color = RGB(25.5*i,255-25.5*i,0);Canvas->Rectangle(20,130-12*i,50,140-12*i);}
      if ((a>90)&&(a<=100)) {Canvas->Brush->Color = RGB(25.5*i,255-25.5*i,0);Canvas->Rectangle(20,130-12*i,50,140-12*i);}
      }
}
 
//a=stats.ullTotalPhys;
//Memo1->Lines->Add(IntToStr(a)+"áàéò âñåé ôèçè÷åñêîé ïàìÿòè");
 
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::RichEdit1Change(TObject *Sender)
{ //RichEdit1->Brush->Color=clBlue;
//TransparentColorValue=clBlue;
//TransparentColor=true;
 
Timer1->Enabled=true;
HideCaret(RichEdit1->Handle);
RichEdit1->Font->Color=clHighlight;
RichEdit1->Font->Style=TFontStyles()<<fsBold;
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Close ();
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::Button2MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    ReleaseCapture();
SendMessage(Form1->Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
}
//---------------------------------------------------------------------------
Делал по анологии как в этом посте.
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
21.12.2014, 15:27
Лучший ответ Сообщение было отмечено wakamon как решение

Решение

Да нормально работает, насчет загруженности не врет (график иногда прерывается, просто никогда раньше с PerformanceGraph вкладки Samples компонентов в билдере не работал):





Код не причесан (лень):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "perfgrap"
#pragma resource "*.dfm"
 
#define SystemProcessorTimes 8
#define MAX_PROCESSORS 32
 
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
typedef struct _SYSTEM_BASIC_INFORMATION
{
    ULONG Unknown,
    MaximumIncrement,
    PhysicalPageSize,
    NumberOfPhysicalPages,
    LowestPhysicalPage,
    HighestPhysicalPage,
    AllocationGranularity,
    LowestUserAddress,
    HighestUserAddress,
    ActiveProcessors;
    char NumberProcessors;
}SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
 
typedef struct _SYSTEM_PROCESSOR_TIMES
{
    __int64 IdleTime,
    KernelTime,
    UserTime,
    DpcTime,
    InterruptTime;
    ULONG InterruptCount;
} SYSTEM_PROCESSORS_TIMES[MAX_PROCESSORS], SYSTEM_PROCESSOR_TIMES, *PSYSTEM_PROCESSOR_TIMES;
 
typedef UINT __stdcall (*ZwQuerySystemInformation)(DWORD,void*,DWORD,DWORD*);
 
/*function*/
 
SYSTEM_INFO SYSINFO;
 
int GetProcessorsCount(void)
{
  SYSTEM_INFO SYSINFO;
  GetSystemInfo(&SYSINFO);
  return SYSINFO.dwNumberOfProcessors;
}
 
int GetProcessorType(SYSTEM_INFO& SYSINFO)
{
GetSystemInfo(&SYSINFO);
return SYSINFO.dwProcessorType;
}
 
int GetProcessorOemId(SYSTEM_INFO& SYSINFO)
{
GetSystemInfo(&SYSINFO);
return SYSINFO.dwOemId;
}
 
int * cpu_usage;
__int64 temp = 0;
unsigned int cycle_count = 0,
             count_mas = 0,
             interval = 1000; //период опроса (мс)
 
HMODULE lib = NULL;
DWORD nowtime, oldtime, pertime, rez, curtime = 0;
SYSTEM_PROCESSORS_TIMES CurrentSysProcTimes, PreviousSysProcTimes;
 
ZwQuerySystemInformation func;
 
String msg = "";
char * windowname = new char[20];
 
bool init = false;
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    strcpy(windowname,"CPU usage");
 
    ZeroMemory(&CurrentSysProcTimes[0],sizeof(CurrentSysProcTimes));
    ZeroMemory(&PreviousSysProcTimes[0],sizeof(PreviousSysProcTimes));
 
    lib = LoadLibrary(L"Ntdll.dll");   //динамическая загрузка библиотеки
 
    if (!lib)
    {
        msg = "Error #1: Не удалось динамически загрузить быблиотеку!";
        Application->MessageBox(msg.c_str(), L"Warning", MB_OK | MB_ICONERROR);
        return;
    }
 
    func = (ZwQuerySystemInformation)GetProcAddress(lib,"ZwQuerySystemInformation");  //запрос адреса функции
 
    if (!func)
    {
        msg = "Error #2: Не удалось получить адрес функции!";
        Application->MessageBox(msg.c_str(), L"Warning", MB_OK | MB_ICONERROR);
        FreeLibrary(lib);
        return;
    }
 
    Label1->Caption = "количество ядер : " + IntToStr(GetProcessorsCount()) + " / тип процессора : " + IntToStr(GetProcessorType(SYSINFO)) + " / OemId : " + IntToStr(GetProcessorOemId(SYSINFO));
    init = true;
    msg = "Инициализация успешна!";
    Application->MessageBox(msg.c_str(), (String(windowname)).c_str(), MB_OK | MB_ICONINFORMATION);
    Button1->Enabled = false;
    Button3->Enabled = true;
 
    cpu_usage = new int[100000];
    count_mas = 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
        nowtime = GetTickCount();
        pertime = nowtime - oldtime;
        curtime += pertime;
        oldtime = nowtime;
 
        /*read the usage*/
        func(SystemProcessorTimes,
              &CurrentSysProcTimes[0],
              sizeof(CurrentSysProcTimes),
              &rez);
 
        temp = 0;
        for(int j=0;j<MAX_PROCESSORS;j++)
        {
            temp += CurrentSysProcTimes[j].IdleTime - PreviousSysProcTimes[j].IdleTime;
        }
        temp /= 10000;  //переводим из наносекунд в миллисекунды
        temp /= (int) GetProcessorsCount(); //делим на количество ядер
 
        temp = (int) pertime - temp;
 
 
        if (cycle_count >= 1)
        {
        msg = "";
        msg += "Current time: " + String(curtime) + " milisecond(s). Processor usage on " + String(temp) + " milisecond.";
  //        Memo1->Lines->Add(msg);
 
 
        cpu_usage[count_mas] = temp / (float) pertime*100;
//      Edit4->Text = IntToStr(count_mas + 1);
 
        msg = "";
        msg += "Usage of processors is " + IntToStr(cpu_usage[count_mas]) + "%";
//      Memo1->Lines->Add(msg);
//      Memo1->Lines->Add("");
        Caption = msg;
        PerformanceGraph1->Scale += 1;
//      PerformanceGraph1->StepSize = 1;
 
        count_mas++;
        }
 
        cycle_count++;
//        Edit2->Text = IntToStr(cycle_count);
 
        memcpy(&PreviousSysProcTimes[0],
                &CurrentSysProcTimes[0],
                sizeof(PreviousSysProcTimes));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PerformanceGraph1ScaleChange(TObject *Sender)
{
  PerformanceGraph1->DataPoint(clLime, cpu_usage[count_mas]);
  PerformanceGraph1->Update();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if (Timer1->Enabled)
{
Timer1->Enabled = false;
 
//cycle_count = 0;
temp = 0;
curtime = 0;
oldtime = GetTickCount();
 
Button2->Enabled = false;
Button3->Enabled = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if (init)
{
    Button3->Enabled = false;
 
    /*init prev processors data*/
 
    //вызываем функцию по таймеру и один раз до запуска таймера.
    oldtime =  GetTickCount();
    if (func(SystemProcessorTimes,
              &PreviousSysProcTimes[0],
              sizeof(PreviousSysProcTimes),0) != 0)
    {
        msg = "Error #3: Ошибка функции!";
        Application->MessageBox(msg.c_str(), L"Warning", MB_OK | MB_ICONERROR);
        FreeLibrary(lib);
        return;
    }
 
Sleep(100);
cycle_count = 0;
 
Button2->Enabled = true;
 
Timer1->Interval = interval;
Timer1->Enabled = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if (lib) FreeLibrary(lib);
delete[] cpu_usage;
}
//---------------------------------------------------------------------------
Вложения
Тип файла: zip cpu_usage.zip (138.9 Кб, 87 просмотров)
2
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
21.12.2014, 15:58
С графиком разобрался: строку 181 нужно заменить на
C++
1
  PerformanceGraph1->DataPoint(clLime, cpu_usage[count_mas]+1);
0
 Аватар для wakamon
0 / 0 / 1
Регистрация: 11.12.2014
Сообщений: 14
22.12.2014, 22:19  [ТС]
gunslinger, не осталось ли у вас исходников от программы cpu_usage?
та, которая в архиве, она не запускается
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
22.12.2014, 22:41
Глючный билдер не всегда настройки проекта сохраняет (но это лишь мои проблемы).
Лови. XE5 если что.
Вложения
Тип файла: zip cpu_usage.zip (1.40 Мб, 155 просмотров)
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.12.2014, 22:41
Помогаю со студенческими работами здесь

Загруженность цп 100% в простое, при открытии диспетчера задач загруженность падает
Здравствуйте! процессор amd fx 8320, в простое нагружаются 4 ядра из 8 до 100%, как только запускаю диспетчер задач или process explorer,...

Получить загруженность процессора андроида
Как подобное можно сделать? Нашел программу https://play.google.com/store/apps/details?id=pavel.ugo.cpumonitor4 Она вычисляет %...

Как определить загруженность?
Доброй ночи, уважаемые пользователи форума. Подскажите пожалуйста, как правильно определить загруженность. Существуют 3 станка, они...

Как вставить индикатор в процентах?
Я, наверное, засыпал вопросами... Но все-таки: можно ли, и если можно, то как, вставить индикацию в процентах в ProgressBar? ...

Как сделать элементы в процентах?
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot; height=&quot;175&quot; style=&quot;background:url('*******') repeat-x;&quot;&gt; &lt;tr&gt; &lt;td...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru