Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Delphi. Π’Ρ€ΡŽΠΊΠΈ ΠΈ эффСкты». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 33

Автор Π’Π°Π»Π΅Ρ€ΠΈΠΉ Борисок

Листинг 7.5.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ состояния систСмы питания

procedure TForm1.LoadPowerStatus();

var

batFlags: String;

status: TSystemPowerStatus;

prof_info: THWProfileInfo;

begin

lvwPowerStatus.Clear;

//ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ состоянии питания

ZeroMemory(Addr(status), SizeOf(status));

GetSystemPowerStatus(status);

//ЗаполняСм список ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ состоянии питания

//..ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ сСти

case status.ACLineStatus of

0: AddParam(\'ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ сСти\', \'ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½\');

1: AddParam(\'ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ сСти\', \'ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½\');

else AddParam(\'ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ сСти\', \'НСизвСстно\');

end;

//..заряд Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ (битовая маска)

if status.BatteryFlag and 1 <> 0 then batFlags := \'Высокий \

if status.BatteryFlag and 2 <> 0 then batFlags := batFlags +

\'Низкий \

if status.BatteryFlag and 4 <> 0 then

batFlags := batFlags + \'ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ \

if status.BatteryFlag and 8 <> 0 then

batFlags := batFlags + \'(Π˜Π΄Π΅Ρ‚ зарядка)\

if status.BatteryFlag and 128 <> 0 then

batFlags := batFlags + \'БатарСя Π½Π΅ установлСна\

if status.BatteryFlag = 255 then batFlags := batFlags + \'НС-

извСстно\

AddParam(\'Заряд Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ\', batFlags);

//..числСнныС характСристики Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ

if status.BatteryLifePercent <> 255 then

AddParam(\'ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ заряда Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ\',

IntToStr(Integer(status.BatteryLifePercent)))

else

AddParam(\'ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ заряда Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ\', \'НСизвСстно\');

if status.BatteryLifeTime <> Cardinal(–1) then

AddParam(\'ВрСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ (остаток, сСк.)\',

IntToStr(Integer(status.BatteryLifeTime)))

else

AddParam(\'ВрСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ (остаток, сСк.)\', \'НСизвСстно\');

if status.BatteryFullLifeTime <> Cardinal(–1) then

AddParam(\'ПолноС врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ, сСк.\',

IntToStr(Integer(status.BatteryFullLifeTime)))

else

AddParam(\'ПолноС врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ, сСк.\', \'НСизвСстно\');

end;

Π’ листингС 7.5 для отобраТСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° систСмы питания вызываСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° AddParam, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‰Π°Ρ Π² элСмСнт управлСния Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΈΠΌ элСмСнтом управлСния ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ListView. Для Ρ‚Π°ΠΊΠΎΠ³ΠΎ случая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ LoadPowerStatus ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° рис. 7.2.

Рис. 7.2. Бобранная информация ΠΎ систСмС питания

Π’ нашСм случаС ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΡΠΏΡ‹Ρ‚Ρ‹Π²Π°Π»Π°ΡΡŒ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Ρ…ΠΎΡ‚ΡŒ ΠΈ снабТСнном аккумулятором, Π½ΠΎ с явно Π½Π΅Π΄ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ систСмой питания.

И послСдниС нСсколько слов ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° рассмотрСнный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ. А пригодится ΠΎΠ½ Π² случаС, Ссли вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ большим объСмом Π²Π°ΠΆΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π° сохранСниС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… трСбуСтся Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя ΠΈ потСря ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ принСсти большиС нСприятности. Π’ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ разрядки Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ (Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅, Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ) Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° диск Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠΈΡ… Π²Ρ€Π΅ΠΌΠ΅Π½, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅ вновь Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Π° заряд Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ Π½Π΅ достигнСт Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ значСния.

БостояниС памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ снимка Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Ρ‚Π°ΠΊΠΆΠ΅ являСтся нСслоТной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. НСдаром эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ прилоТСния, Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π‘Π»ΠΎΠΊΠ½ΠΎΡ‚, выводят Π² ΠΎΠΊΠ½Π΅ О ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅: Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π½Π°Π΄ΠΎ, Π° свСдСния ΠΎΠ± объСмС памяти каТутся довольно Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ.

Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ состояниС памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ API-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GlobalMemoryStatus. Данная функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° структуру TMemoryStatus, заполняСт Π΅Π΅ поля значСниями ΠΈ Π² случаС успСха Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΎΡ‚ нуля число. ОбъявлСниС структуры TMemoryStatus с коммСнтариями Ρ€ΠΎΠ»ΠΈ Π΅Π΅ ΠΏΠΎΠ»Π΅ΠΉ приводится Π½ΠΈΠΆΠ΅:...

TMemoryStatus = record

dwLength: DWORD; //Π Π°Π·ΠΌΠ΅Ρ€ структуры (Π±Π°ΠΉΡ‚)

dwMemoryLoad: DWORD; //ΠŸΡ€ΠΎΡ†Π΅Π½Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ физичСской памяти

dwTotalPhys: DWORD; //ΠŸΠΎΠ»Π½Ρ‹ΠΉ объСм физичСской памяти

dwAvailPhys: DWORD; //ОбъСм свободной ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти

dwTotalPageFile: DWORD; //ΠŸΠΎΠ»Π½Ρ‹ΠΉ объСм Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ

dwAvailPageFile: DWORD; //ОбъСм свободного пространства

//Π² Ρ„Π°ΠΉΠ»Π΅ ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ

dwTotalVirtual: DWORD; //ΠŸΠΎΠ»Π½Ρ‹ΠΉ объСм Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти

dwAvailVirtual: DWORD; //ОбъСм свободной Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти

end;

Π”Π²Π° послСдниС поля структуры TMemoryStatus относятся ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ GlobalMemoryStatus. Они рассмотрСны Ρ‡ΡƒΡ‚ΡŒ Π½ΠΈΠΆΠ΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GlobalMemoryStatus ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 7.6.

...

Листинг 7.6.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ состояния памяти

procedure TForm1.LoadMemoryInfo();

var

memStat: TMemoryStatus;

begin

memStat.dwLength := SizeOf(memStat);

//ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ памяти

GlobalMemoryStatus(memStat);

//Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΡ‹

//..% использования памяти

pbMemUsage.Position := memStat.dwMemoryLoad;

lblMemUsage.Caption := IntToStr(memStat.dwMemoryLoad) + \'%\

//..использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти

txtMemTotal.Text := IntToStr(memStat.dwTotalPhys div 1024);

txtMemAvail.Text := InttoStr(memStat.dwAvailPhys div 1024);

//..использованиС Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ

txtPageTotal.Text := IntToStr(memStat.dwTotalPageFile div 1024);

txtPageAvail.Text := InttoStr(memStat.dwAvailPageFile div 1024);

//..использованиС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти

txtVirtualTotal.Text := IntToStr(memStat.dwTotalVirtual div 1024);

txtVirtualAvail.Text := InttoStr(memStat.dwAvailVirtual div 1024);

end;

Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄ Ρ„ΠΎΡ€ΠΌΡ‹, элСмСнты управлСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ значСниями Π² листингС 7.6, ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° рис. 7.3.

Рис. 7.3. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для опрСдСлСния состояния памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°

НапослСдок рассмотрим (нСсколько ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎ), Ρ‡Ρ‚ΠΎ Π·Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выводятся Π² тСкстовых полях Ρ„ΠΎΡ€ΠΌΡ‹, для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ Π² курсС, ΠΊΠ°ΠΊ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² ОБ Windows.

Π˜Ρ‚Π°ΠΊ, ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ процСссу Windows прСдоставляСт адрСсноС пространство (Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅) Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Ρ‡ΡƒΡ‚ΡŒ мСньшС 2 Π“Π±Π°ΠΉΡ‚. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ 16-Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΡ†, Π² 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… Windows адрСсныС пространства Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… процСссов ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ: ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ (Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅, младшиС 2 Π“Π±Π°ΠΉΡ‚ адрСсного пространства) Π΅Π΄ΠΈΠ½ΠΎΠ»ΠΈΡ‡Π½ΠΎ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… усилий ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… процСссов. ЗначСния Π² Π΄Π²ΡƒΡ… послСдних полях CTpyKTypbiTMemoryStatus (ΠΈ ниТняя Π³Ρ€ΡƒΠΏΠΏΠ° тСкстовых ΠΏΠΎΠ»Π΅ΠΉ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ рис. 7.3) ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ использованиС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ прСдоставляСмого Π΅ΠΌΡƒ адрСсного пространства.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти являСтся довольно ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ надстройкой, ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… рСсурсов ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ объСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти компСнсируСтся использованиСм мСста Π½Π° дискС (Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ, страничного Ρ„Π°ΠΉΠ»Π°). Π’ этот Ρ„Π°ΠΉΠ» Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ хранСния Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ страницы памяти (Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ нСсколько ΠšΠ±Π°ΠΉΡ‚), давая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ вСрнСмся ΠΊ Ρ„ΠΎΡ€ΠΌΠ΅, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π½Π° рис. 7.3. Π“Ρ€ΡƒΠΏΠΏΠ° тСкстовых ΠΏΠΎΠ»Π΅ΠΉ ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΈ свободный объСм Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ установлСнной Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти (Π·Π° Π²Ρ‹Ρ‡Π΅Ρ‚ΠΎΠΌ памяти, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ для систСмных Π½ΡƒΠΆΠ΄). ИспользованиС этого Π²ΠΈΠ΄Π° памяти ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π Π³ΠΎΠ΄Π³Π΅Π·Π‘Π’Π°Π³ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅. НазначСниС ΠΏΡ€Π°Π²ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ тСкстовых ΠΏΠΎΠ»Π΅ΠΉ (Π€Π°ΠΉΠ» ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ) Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ.

Из Ρ†ΠΈΡ„Ρ€, Π²Ρ‹Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π² тСкстовыС поля Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ (рис. 7.3), ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΈΠΉ объСм памяти, доступной прилоТСниям (всСго Π±Ρ‹Π»ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ 30 процСссов), Π½Π° испытуСмом ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ составлял ΠΎΠΊΠΎΠ»ΠΎ 1,26 Π“Π±Π°ΠΉΡ‚. Если ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ использовалась всСми процСссами ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, Ρ‚ΠΎ получаСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 43 ΠœΠ±Π°ΠΉΡ‚ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ, Π½Π΅ считая памяти, Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ для самой ОБ Windows.

7.2. БистСмноС врСмя

Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π» посвящСн ΠΎΡ‚Π½ΡŽΠ΄ΡŒ Π½Π΅ простому ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡŽ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠ»ΠΈ Π΄Π°Ρ‚Ρ‹ (Π±Π»Π°Π³ΠΎ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Borland). Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ обратимся ΠΊ нСсколько Π±ΠΎΠ»Π΅Π΅ интСрСсной Ρ‚Π΅ΠΌΠ΅ – использованию систСмных срСдств измСрСния ΠΌΠ°Π»Ρ‹Ρ… ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΎΠ² Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

ВсС рассмотрСнныС Π΄Π°Π»Π΅Π΅ способы измСрСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ основаны Π½Π° подсчСтС количСства Β«Ρ‚ΠΈΠΊΠΎΠ²Β» Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Для сохранСния ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° систСма ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ счСтчики. Для опрСдСлСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ показания счСтчика Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Находим Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ показаниями ΠΈ, Ссли ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π½Π΅ соотвСтствуСт Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ измСрСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, мс), Π΄Π΅Π»ΠΈΠΌ Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ Π½Π° частоту Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

Π”Π°Π²Π½ΠΎ Π»ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° опСрационная систСма?

Π‘ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° своСго запуска Windows Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π½Π°Ρ€Π°Ρ‰ΠΈΠ²Π°Π½ΠΈΠ΅ значСния ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ счСтчика, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ количСство Β«Ρ‚ΠΈΠΊΠΎΠ²Β» (Π² миллисСкундах), ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° запуска систСмы.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, этот систСмный счСтчик Β«Ρ‚ΠΈΠΊΠΎΠ²Β» ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ для опрСдСлСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы, Ρ‚Π°ΠΊ ΠΈ для измСрСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ². Для доступа ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ API-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ GetTickCount. Она Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ цСлочислСнноС 32-Π±ΠΈΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π² листингС 7.7. функция GetSystemWorkTime дСмонстрируСт использованиС счСтчика Β«Ρ‚ΠΈΠΊΠΎΠ²Β» для опрСдСлСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы Π² часах, ΠΌΠΈΠ½ΡƒΡ‚Π°Ρ… ΠΈ сСкундах.

...

Листинг 7.7.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы

function GetSystemWorkTime(): String;

var

ticks: DWORD;

hh, mm, ss: Cardinal;

begin

//ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ количСство миллисСкунд с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° старта систСмы

ticks := GetTickCount();

//ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ Π² сСкунды

ticks := ticks div 1000;

//ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ количСство часов, ΠΌΠΈΠ½ΡƒΡ‚, сСкунд

hh := ticks div 3600;

Dec(ticks, hh * 3600);

mm := ticks div 60;

Dec(ticks, mm * 60);

ss := ticks;

GetSystemWorkTime := IntToStr(hh) + \':\' +

IntToStr(mm) + \':\' + IntToStr(ss);

end;

Из-Π·Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ°Π»ΠΎΠΉ разрядности Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика обнуляСтся ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 49,7 суток, Ρ‡Ρ‚ΠΎ слСдуСт ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΈ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ² ΠΈΠ»ΠΈ Ссли ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ начинаСтся послС Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π°Ρ‡Π°Π»ΠΎ измСрСния Π²Ρ‹ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π° 50-Π΅ сутки Π·Π° час Π΄ΠΎ обнулСния счСтчика).