-->

Setting Thread and Class Priorities in a VB App

 
Simple standard module for setting the priority of the your app's process. Useful for screen savers so that they don't tie up the processor when another app is running an unattended task.
 
 
Caution: The VB IDE and its Projects share the same process space. When experimenting with this in the IDE make sure that you exit gracefully so that the priorities can be returned to normal (i.e. don't hit the stop button). 

Download source code with a test app (3KB)

 
Option Explicit

'By Arthur Marks, arthurruhtra@netscape.net
'Use at your own risk...

Private Declare Function SetThreadPriority Lib "kernel32" (ByVal hThread As Long, ByVal nPriority As Long) As Long
Private Declare Function GetThreadPriority Lib "kernel32" (ByVal hThread As Long) As Long
Private Const THREAD_BASE_PRIORITY_IDLE = -15
Private Const THREAD_BASE_PRIORITY_LOWRT = 15
Private Const THREAD_BASE_PRIORITY_MAX = 2
Private Const THREAD_BASE_PRIORITY_MIN = -2
Private Const MAXLONG = &H7FFFFFFF
'Private Const THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX
'Private Const THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN
'Private Const THREAD_PRIORITY_ABOVE_NORMAL = (THREAD_PRIORITY_HIGHEST - 1)
'Private Const THREAD_PRIORITY_BELOW_NORMAL = (THREAD_PRIORITY_LOWEST + 1)
'Private Const THREAD_PRIORITY_ERROR_RETURN = (MAXLONG)
'Private Const THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE
'Private Const THREAD_PRIORITY_NORMAL = 0
'Private Const THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT
Public Enum eTHREAD_PRIORITY
    THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN '-2
    THREAD_PRIORITY_NORMAL = 0
    THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX '2
    THREAD_PRIORITY_ABOVE_NORMAL = (THREAD_PRIORITY_HIGHEST - 1) '1
    THREAD_PRIORITY_BELOW_NORMAL = (THREAD_PRIORITY_LOWEST + 1) '-1
    THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE '-15
    THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT '15
    THREAD_PRIORITY_ERROR_RETURN = (MAXLONG)
End Enum

Private Declare Function SetPriorityClass Lib "kernel32" (ByVal hProcess As Long, ByVal dwPriorityClass As Long) As Long
Private Declare Function GetPriorityClass Lib "kernel32" (ByVal hProcess As Long) As Long
'Private Const HIGH_PRIORITY_CLASS = &H80
'Private Const IDLE_PRIORITY_CLASS = &H40
'Private Const NORMAL_PRIORITY_CLASS = &H20
'Private Const REALTIME_PRIORITY_CLASS = &H100
Public Enum ePROCESS_PRIORITY
    ERROR_PRIORITY_CLASS = 0 'my addition in case api fails
    IDLE_PRIORITY_CLASS = &H40
    NORMAL_PRIORITY_CLASS = &H20
    HIGH_PRIORITY_CLASS = &H80
    REALTIME_PRIORITY_CLASS = &H100
End Enum

Private Declare Function GetCurrentThread Lib "kernel32" () As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
'----------------------------------------------------------------


Public Property Get ProcessPriority() As ePROCESS_PRIORITY
    ProcessPriority = GetPriorityClass(GetCurrentProcess)
End Property

Public Property Let ProcessPriority(ByVal vNewValue As ePROCESS_PRIORITY)
    SetPriorityClass GetCurrentProcess, vNewValue
End Property

Public Property Get ThreadPriority() As eTHREAD_PRIORITY
    ThreadPriority = GetThreadPriority(GetCurrentThread)
End Property

Public Property Let ThreadPriority(ByVal vNewValue As eTHREAD_PRIORITY)
    SetThreadPriority GetCurrentThread, vNewValue
End Property