Rubrik: System/Windows · Prozesse/Tasks | VB-Versionen: VB4, VB5, VB6 | 29.10.04 |
Prozess-Priorität des eigenen Programms ändern Dieser Tipp zeigt, wie sich die Prozess-Priorität des eigenen Programms ändern lässt. | ||
Autor: Dieter Otter | Bewertung: | Views: 22.484 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Im Windows-Taskmanager lässt sich über das Kontextmenü im Register "Prozesse" die Priorität der laufenden Prozesse festlegen. Auf diese Weise kann einer Anwendung eine höhere oder auch eine niedrigere Priorität zugewiesen werden. Im Normalfall ist die Prozess-Priorität auf "Normal" eingestellt.
Mit unserem heutigen Tipp möchten wir Ihnen zeigen, wie Sie die Priorität Ihrer eigenen Anwendung direkt aus VB heraus ändern können.
Fügen Sie hierzu nachfolgenden Code in ein Modul ein:
Option Explicit ' Benötigte API-Deklarationen Private Const PROCESS_DUP_HANDLE = &H40 Private Const PROCESS_SET_INFORMATION = &H200 Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long Private Declare Function OpenProcess Lib "kernel32" ( _ ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long) As Long Private Declare Function SetPriorityClass Lib "kernel32" ( _ ByVal hProcess As Long, _ ByVal dwPriorityClass As Long) As Long Private Declare Function CloseHandle Lib "kernel32" ( _ ByVal hObject As Long) As Long ' Prioritätsstufen Public Enum PriorityClass IDLE_PRIORITY_CLASS = &H40 NORMAL_PRIORITY_CLASS = &H20 HIGH_PRIORITY_CLASS = &H80 REALTIME_PRIORITY_CLASS = &H100 End Enum
' Prozess-Priorität ändern Public Sub SetPriority(ByVal nPriority As PriorityClass) Dim nPID As Long Dim hProcess As Long ' ProzessID ermitteln nPID = GetCurrentProcessId() ' Prozess-Handle hProcess = OpenProcess(PROCESS_DUP_HANDLE + PROCESS_SET_INFORMATION, 1, nPID) If hProcess <> 0 Then ' Prozess-Priorität setzen SetPriorityClass hProcess, nPriority End If ' Handle wieder freigeben CloseHandle hProcess End Sub
Aufrufbeispiel:
' Priorität der eigenen Anwendung auf "hoch" setzen
SetPriority HIGH_PRIORITY_CLASS
Erläuterung der einzelnen Prioritätsstufen:
- IDLE_PRIORITY_CLASS: Niedrigste Prioritätsstufe. Die Anwendung erhält nur dann Prozessorzeit zugeteilt, wenn sich das System im "Ruhestand" befindet, d.h. kein anderer Prozess mit höherer Prioritätsstufe CPU-Zeit in Anspruch nimmt.
- NORMAL_PRIORITY_CLASS: Normale Prioritätsstufe (Standard).
- HIGH_PRIORITY_CLASS: Hohe Prioritätsstufe. Diese Einstellung ist für Anwendungen gedacht, die zeitkritische Aufgaben erledigen müssen - und das am besten sofort. Prozesse mit niedrigeren Prioritätsstufen enthalten entsprechend weniger Rechenzeit zugeteilt. Verwenden Sie diese Prioritätsstufe sehr sorgfältig und setzen Sie die Prioritätsstufe wieder auf normal, sobald die zeitkritischen Aufgaben erledigt wurden!
- REALTIME_PRIORITY_CLASS: Höchste Prioritätsstufe (Echtzeit). Ist nur für absolute Ausnahmefälle gedacht und muss äußerst sorgfältig und kurzfristig verwendet werden, da diese Prioritätsstufe selbst Windows in den Hintergrund drängt und evtl. notwendige Windows-Zwischenspeicherungen (disk caches) nicht mehr ausgeführt werden können. Unter Umständen kann das Verwenden der "Echtzeit"-Prioritätsstufe auch dazu führen, dass die Maus nicht mehr reagiert!