Παρασκευή 11 Μαΐου 2012

Set priority level of running application (process)

Using SetPriorityClass function, you can set priority level of your running application. Same functionality is in the Task Manager (just rightclick the process in the list and select priority level).

procedure SetPriorityLevel(P: byte);
begin
  case p of
  1: Setpriorityclass(GetCurrentProcess(), IDLE_PRIORITY_CLASS);
  2: Setpriorityclass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS);
  3: Setpriorityclass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);
  4: Setpriorityclass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
  end;
end;

Just call this procedure with parameter of priority level you want to set. Here are just four levels of priority because of compatibility in all Windows versions. List of possible constants:

PriorityMeaning
 
ABOVE_NORMAL_PRIORITY_CLASS
0x00008000
Process that has priority above NORMAL_PRIORITY_CLASS but below HIGH_PRIORITY_CLASS.
BELOW_NORMAL_PRIORITY_CLASS
0x00004000
Process that has priority above IDLE_PRIORITY_CLASS but below NORMAL_PRIORITY_CLASS.
HIGH_PRIORITY_CLASS
0x00000080
Process that performs time-critical tasks that must be executed immediately. The threads of the process preempt the threads of normal or idle priority class processes. An example is the Task List, which must respond quickly when called by the user, regardless of the load on the operating system. Use extreme care when using the high-priority class, because a high-priority class application can use nearly all available CPU time.
IDLE_PRIORITY_CLASS
0x00000040
Process whose threads run only when the system is idle. The threads of the process are preempted by the threads of any process running in a higher priority class. An example is a screen saver. The idle-priority class is inherited by child processes.
NORMAL_PRIORITY_CLASS
0x00000020
Process with no special scheduling needs.
PROCESS_MODE_BACKGROUND_BEGIN
0x00100000
Begin background processing mode. The system lowers the resource scheduling priorities of the process (and its threads) so that it can perform background work without significantly affecting activity in the foreground.
This value can be specified only if hProcess is a handle to the current process. The function fails if the process is already in background processing mode.
Windows Server 2003 and Windows XP:  This value is not supported.
PROCESS_MODE_BACKGROUND_END
0x00200000
End background processing mode. The system restores the resource scheduling priorities of the process (and its threads) as they were before the process entered background processing mode.
This value can be specified only if hProcess is a handle to the current process. The function fails if the process is not in background processing mode.
Windows Server 2003 and Windows XP:  This value is not supported.
REALTIME_PRIORITY_CLASS
0x00000100
Process that has the highest possible priority. The threads of the process preempt the threads of all other processes, including operating system processes performing important tasks. For example, a real-time process that executes for more than a very brief interval can cause disk caches not to flush or cause the mouse to be unresponsive.

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου