C++ Builder Snippets  

Anwendungspriorität festlegen:
 
Prioritätsklassen der Prozesse unter Win32
-------------------------------------------------

Die Prozessorzeit wird den Anwendungen unter Windows entsprechend ihren Prozess-Prioritätsklassen zugeteilt. Das Betriebssystem unterscheidet dabei zwischen 4 Prioritätsklassen:

REALTIME_PRIORITY_CLASS : nur für Gerätetreiber und ähnliche Softwarekomponenten, die unmittelbar auf Ereignisse der Hardware reagieren müssen
HIGH_PRIORITY_CLASS : für besonders zeitkritische Abläufe, z.B. Kommunikation mit Hardware, Prozesssteuerung, Mitloggen von Daten - wo die Software in der Lage sein muss besonders schnell und sicher zu reagieren
NORMAL_PRIORITY_CLASS : für alle 'gewöhnliche' Anwendungen
IDLE_PRIORITY_CLASS : Prozesse dieser Klasse werden ausgeführt wenn das Betriebssystem sich 'im Leerlauf' befindet, sie eignen sich somit für nicht zeitkritische 'Wartungsarbeiten' im Rechner


Ein Hinweis des Besuchers der RAD-Seiten Dr. Wieland Scholz:

Wenn man unter Win9x die Prozesspriorität auf REALTIME_PRIORITY_CLASS setzt, kann man trotzdem noch die Maus in seinem Hauptfenster benutzen, um z.B. den Vorgang mit der hohen Priorität abzubrechen. Unter Win2000 geht das nicht mehr. Soll während eines Vorgranges mit hoher Priorität ein Nutzereingriff noch möglich sein, darf maximal HIGH_PRIORITY_CLASS eingesetzt werden.



Prioritätsklasse des Prozesses kann zum beliebigen Zeitpunkt während der Programmlaufzeit mit Hilfe der API-Funktion SetPriorityClass() angepasst werden:

//-----------------------------------------------------------------------
//  Funktion zur Anpassung der Prioritätsklasse des akt.Prozesses zur 
//  Programmlaufzeit:
//-----------------------------------------------------------------------
//  Als Parameter kann eine der folgenden Konstanten übergeben werden: 
//                IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS,
//                HIGH_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS
//-----------------------------------------------------------------------
void __fastcall TForm1::SetProcPriority(DWORD dwPiority)
{
   // Process-Handle mit GetCurrentProcess() bestimmen und der Funktion 
   // SetPriorityClass() übergeben:
   if(!SetPriorityClass(GetCurrentProcess(), dwPiority)) 
     ShowMessage("Prozess-Priorität konnte nicht geändert werden");
}




© '99-2000 by S. Kreutzmann