Как получить / установить приоритет процесса?

Материал из DRKB

Как получить / установить приоритет процесса?[править | править код]

const
  ppIdle     : Integer = -1;
  ppNormal   : Integer =  0;
  ppHigh     : Integer =  1;
  ppRealTime : Integer =  2;

function SetProcessPriority(Priority: Integer): Integer;
var
  H: THandle;
begin
  Result := ppNormal;
  H := GetCurrentProcess();
  if (Priority = ppIdle) then
    SetPriorityClass(H, IDLE_PRIORITY_CLASS)
  else if (Priority = ppNormal) then
    SetPriorityClass(H, NORMAL_PRIORITY_CLASS)
  else if (Priority = ppHigh) then
    SetPriorityClass(H, HIGH_PRIORITY_CLASS)
  else if (Priority = ppRealTime) then
    SetPriorityClass(H, REALTIME_PRIORITY_CLASS);
  case GetPriorityClass(H) of
    IDLE_PRIORITY_CLASS     : Result := ppIdle;
    NORMAL_PRIORITY_CLASS   : Result := ppNormal;
    HIGH_PRIORITY_CLASS     : Result := ppHigh;
    REALTIME_PRIORITY_CLASS : Result := ppRealTime;
  End;
end;

function GetProcessPriority: Integer;
var
  H: THandle;
begin
  Result := ppNormal;
  H := GetCurrentProcess();
  case GetPriorityClass(H) of
    IDLE_PRIORITY_CLASS     : Result := ppIdle;
    NORMAL_PRIORITY_CLASS   : Result := ppNormal;
    HIGH_PRIORITY_CLASS     : Result := ppHigh;
    REALTIME_PRIORITY_CLASS : Result := ppRealTime;
  end;
end;


Как использовать:

function SetProcessPriority(Priority: Integer): Integer; 

для установки приоритета Вашего приложения, либо:

function GetProcessPriority: Integer; 

для получения приоритета.


Source: Взято из http://forum.sources.ru
ID: 02042



Следующий пример изменяет приоритет приложения. Изменение приоритета следует использовать с осторожностью - т.к. присвоение слишком высокого приоритета может привести к медленной работе остальных программ и системы в целом. См. Win32 help for SetThreadPriority() function.


procedure TForm1.Button1Click(Sender: TObject);
var
  ProcessID: DWORD;
  ProcessHandle: THandle;
  ThreadHandle: THandle;
begin
  ProcessID := GetCurrentProcessID;
  ProcessHandle := OpenProcess(PROCESS_SET_INFORMATION,
                               False,
                               ProcessID);
  SetPriorityClass(ProcessHandle, REALTIME_PRIORITY_CLASS);
  ThreadHandle := GetCurrentThread;
  SetThreadPriority(ThreadHandle, THREAD_PRIORITY_TIME_CRITICAL);
end;


ID: 02043