vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: System/Windows · Prozesse/Tasks   |   VB-Versionen: VB4, VB5, VB629.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 OtterBewertung:  Views:  22.484 
www.tools4vb.deSystem:  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!



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.