Ouvrir un nouveau projet.
Poser en vrac :
- 1 TButton,
- 1 TTimer,
- 1 TLabel,
Ajouter la procedure "procedure DoAnything" dans private (ou dans public, I don't care (et j'm'en fous)).
type
TForm1 = class(TForm)
Timer1: TTimer;
Button1: TButton;
Label1: TLabel; // 1 TLabel
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
procedure DoAnything; // 1 procedure
public
{ Déclarations publiques }
end;
Associer les évènements :
- OnCreate du TForm,
- OnClose du TForm,
- OnTimer du TTimer,
- OnClick du TButton
au code ci-après,
sans oublier de copier coller le reste du code !
implementation
{$R *.DFM}
// conversion d'une valeur TFileTime en Int64
function FileTimeToQuadWord(FileTime: TFileTime): Int64;
begin
Result := (FileTime.dwHighDateTime shl 32) + FileTime.dwLowDateTime;
end;
// utilisé par GetCpuUsedByAppli, à laisser au-dessus
var
IdleTimeOld: TFileTime;
KernelTimeOld: TFileTime;
UserTimeOld: TFileTime;
function GetCpuUsedByAppli: Integer;
type
TGetSystemTimes = function(const IdleTime, KernelTime, UserTime: PFileTime): Boolean; stdcall;
var
ModuleHandle: THandle;
GetSystemTimes: TGetSystemTimes;
IdleTimeNow: TFileTime;
KernelTimeNow: TFileTime;
UserTimeNow: TFileTime;
ElapsedIdleTime: Cardinal;
ElapsedKernelTime: Cardinal;
ElapsedUserTime: Cardinal;
begin
Result := -1;
ModuleHandle := GetModuleHandle(PChar('kernel32.dll'));
@GetSystemTimes := GetProcAddress(ModuleHandle, PChar('GetSystemTimes'));
if Assigned(GetSystemTimes) then
if GetSystemTimes(@IdleTimeNow, @KernelTimeNow, @UserTimeNow) then
begin
ElapsedIdleTime := FileTimeToQuadWord(IdleTimeNow) - FileTimeToQuadWord(IdleTimeOld);
ElapsedKernelTime := FileTimeToQuadWord(KernelTimeNow) - FileTimeToQuadWord(KernelTimeOld);
ElapsedUserTime := FileTimeToQuadWord(UserTimeNow) - FileTimeToQuadWord(UserTimeOld);
if (ElapsedIdleTime < 0) or (ElapsedKernelTime < 0) or (ElapsedUserTime < 0) then Exit;
Result := Trunc(
(ElapsedKernelTime + ElapsedUserTime - ElapsedIdleTime)
/
(ElapsedKernelTime + ElapsedUserTime)
*
100
);
if Result > 100 then Result := -1;
IdleTimeOld := IdleTimeNow;
KernelTimeOld := KernelTimeNow;
UserTimeOld := UserTimeNow;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
CpuUsedByAppli: Integer;
begin
CpuUsedByAppli := GetCpuUsedByAppli;
Label1.Caption := Format('Taux d''utilisation = %d%%', [CpuUsedByAppli]);
end;
var
Stop: Boolean;
procedure TForm1.FormCreate(Sender: TObject);
begin
// Quick interface settings for idle... ;-)
Caption := 'Taux cpu utilisé par l''appli';
Height := 179;
Width := 285;
Position := poScreenCenter;
with Button1 do
begin
Left := 108;
Top := 72;
Caption := 'Off';
end;
with Label1 do
begin
Left := 88;
Top := 28;
Caption := 'Taux d''utilisation =';
end;
Stop := True;
Timer1.Interval := 500; // <- à régler selon la précision souhaitée
Timer1.Enabled := True;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Stop := True;
end;
{
_______________________________________________________________________________
TEST : LANCEMENT D'UNE TACHE POUR AUGMENTER L'UTILISATION DU CPU
_______________________________________________________________________________
}
procedure TForm1.DoAnything; // n'importe quoi...
var
i: Integer;
R: Int64;
begin
Stop := not Stop;
Button1.Caption := 'On';
for i := 1 to 5000000 do
begin
R := (i * 15) div 13;
R := R + R * 7;
Caption := IntToStr(R);
Application.ProcessMessages;
if Stop then
Break;
end;
Button1.Caption := 'Off';
Stop := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DoAnything;
end;
Agiter, (com)piler, à servir frais...