Taux d'occupation du processeur

Contenu du snippet

Tout est dans le titre, ce petit programme affiche le taux d'occupation du processeur.

Attention : ne fonctionne qu'avec Windows 2000 serveur ou Windows XP.

Source / Exemple :


Type
  // Structure utilisée pour le retour des temps d'utilisation systèmes
  TSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION=Record
    Case Integer Of
    1:( IdleTime   : Int64;   // Temps inoccpé     par pas de 100 NanoSecondes
        KernelTime : Int64;   // Temps du noyau    par pas de 100 NanoSecondes
        UserTime   : Int64;   // Temps utilisateur par pas de 100 NanoSecondes
        Reserved1  : Array[0..2]Of Int64;
        Reserved2  : Cardinal;);
    2:( Res        : Array[1..$138]Of Byte);
  End;

// Fonction de demande d'informations sytèmes. Elle sert pour diverses
// demandes sytèmes suivant le paramètre SystemInfoClass. Voir MSDN
// pour plus de détails.
Function NtQuerySystemInformation(SystemInfoClass:Integer;Info:Pointer;InfoLength:Cardinal;
            Var ReturnLength:Cardinal):Integer;StdCall;
            External 'NTDLL.DLL' Name 'NtQuerySystemInformation';

Const
  // Constante utilisée pour la demande d'occupation du processeur
  SystemProcessorPerformanceInformation=$2;

  // Constantes de conversion
  CentNanoSecondesParJour = 24.0*60.0*60.0*10000000.0;
  MilliSecondesParJour    = 24.0*60.0*60.0*1000.0;

Var
  MemTickTotal : Integer = 0;
  MemTickIdle  : Integer = 0;

procedure TForm1.Timer1Timer(Sender: TObject);
Var Info      : TSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
    Long      : Cardinal;
    TickTotal : Integer;
    TickIdle  : Integer;
    DiffTotal : Integer;
    DiffIdle  : Integer;
    Occupe    : Double;
begin
  // Primo on demande les information au système
  NtQuerySystemInformation(SystemProcessorPerformanceInformation,@Info,SizeOf(Info),Long);

  // Conversion du temps 'idle' en millisecondes
  TickIdle  := Info.IdleTime Div 10000;
  // Obtention du temps total
  TickTotal := GetTickCount;

  // Calcul du pourcentage
  DiffIdle  := TickIdle  - MemTickIdle;
  DiffTotal := TickTotal - MemTickTotal;
  Occupe    := 100-DiffIdle/DiffTotal*100;
  If Occupe<0 Then Occupe:=0;

  // Affichage des informations
  Label1.Caption        := FormatDateTime('HH:NN:SS:zzz',Info.IdleTime   /CentNanoSecondesParJour);
  Label4.Caption        := FormatDateTime('HH:NN:SS:zzz',TickTotal       /MilliSecondesParJour   );
  Label5.Caption        := IntToStr(Round(Occupe));
  ProgressBar1.Position := Trunc(Occupe);

  // Mémorisation pour le prochain passage
  MemTickIdle  := TickIdle;
  MemTickTotal := TickTotal;
end;

Conclusion :


Cette source et quelques autres sur : http://nono40.developpez.com

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.