C++ Builder Snippets  

Auslastung der CPU ermitteln:

//---------------------------------------------------------------------------
// Funktion GetCpuUsage() liefert die CPU-Auslastung des Systems
//---------------------------------------------------------------------------
// Übergabeparameter:
// Datentyp      -> enum TPerfAction { paStart, paStop, paGetData };
//   paStart     -> Starten der Performance-Überwachung
//   paStop      -> Beenden der Performance-Überwachung
//   paGetData   -> für die Initialisierung der Performanceüberwachung
//---------------------------------------------------------------------------
// Rückgabewerte:
// -1            -> Fehler aufgetreten
// 0             -> Ausführung erfolgreich (bei paAction == paStop oder
//                  paAction == paStart)
// 0-100         -> CPU-Auslastung in % (bei paAction == paGetData)
//---------------------------------------------------------------------------
int GetCpuUsage(TPerfAction paAction)
{
  int ilRetVal = 0;
  bool blError = false;
  int ilData = 0;
  DWORD lType = REG_DWORD;
  DWORD lSize = 4;
  HKEY hKey;
  AnsiString slKeyName = "PerfStats\\StatData";
  if(paAction == paStart) slKeyName = "PerfStats\\StartStat";
  else if(paAction == paStop) slKeyName = "PerfStats\\StopStat";

  blError = RegOpenKeyEx(HKEY_DYN_DATA, slKeyName.c_str(),  0,
    KEY_READ, &hKey) != ERROR_SUCCESS;

  if(!blError)
    blError = RegQueryValueEx(hKey, "KERNEL\\CPUUsage"0,
      &lType, (BYTE*)(&ilData), &lSize) != ERROR_SUCCESS;

  blError = RegCloseKey(hKey) != ERROR_SUCCESS;

  if(!blError && paAction == paGetData) ilRetVal = ilData;
  else if(!blError) ilRetVal = 0;
  else ilRetVal = -1;
  return ilRetVal;
}

Anwendungsbeispiel

Verwendete Komponenten:

  Formular       Form1
  TLabel         lblValue
  TLabel         lblInterval
  TProgressBar   ProgressBar1
  TTimer         Timer1
  

Quellcode:

Screenshot

//---------------------------------------------------------------------------
// OnShow-Eventhandler des Formulars
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
  lblInterval -> Caption = FloatToStrF(double(TrackBar1->Position)/1000,
    ffFixed, 151) + " S";
  Timer1->Interval = TrackBar1->Position;

  if(GetCpuUsage(paStart))
  {
    Timer1->Enabled = false;
    ShowMessage("Fehler beim Starten der Performance-Überwachung aufgetreten !");
  }
  else
  {
    Application->ProcessMessages();
    Timer1Timer(0);
    Timer1->Enabled = true;
  }
}


//---------------------------------------------------------------------------
// OnTimer-Eventhandler des Timers
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  // Daten holen:
  int ilCpuUsage = GetCpuUsage(paGetData);

  // Daten ausgeben:
  lblValue->Caption = (ilCpuUsage >= 0) ?
    AnsiString(IntToStr(ilCpuUsage)+ " %") : AnsiString("Fehler");
  ProgressBar1 -> Position = ilCpuUsage >= 0 ? ilCpuUsage : 0;
}

//---------------------------------------------------------------------------
// OnClose-Eventhandler des Formulars
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  Timer1->Enabled = false;
  GetCpuUsage(paStop);
}

//---------------------------------------------------------------------------
// OnChange-Eventhandler der TrackBar für die Interval-Einstellung
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
  lblInterval -> Caption = FloatToStrF(double(TrackBar1->Position)/1000,
    ffFixed, 151) + " S";
  Timer1->Interval = TrackBar1->Position;
}

  Download BCB5
Projekt-Quellcode
Download
Demo-Exe

© '99-2001 by S. Kreutzmann