www.gcmsite.ru

Новости Программы PHP-скрипты Статьи Числа
Услуги Резюме Игры Автомобили Поиск

СИСТЕМНОЕ И ВЕБ-ПРОГРАММИРОВАНИЕ
компьютерная техника, игры

Изменение приоритета процессов

Как изменить приоритет процесса в Delphi? В статье рассмотрен простой метод смены приоритетов любым процессам. Алгоритмы работоспособны как в Windows 98, так и в Windows XP. Среда программирования: Borland Delphi 5.

На основе данного алгоритма была создана программа SP-xProcess, предназначенная для изменения приоритетов процессов в любой операционной системе семейства Windows старше Windows 95.

Алгоритм можно разбить на две самостоятельных фазы:

    получение списка процессов
    изменение приоритета процесса по его идентификатору ID

Рабочий массив данных, содержащий основные сведения о процессах в системе

var
 my_pr : array[1..200] of record // здесь находятся все процессы
                           id : Int64; // для win9x нужен тип Int64
                           name : string; // название процесса в памяти
                           priority : integer; // числовое значение приоритета
                          end;
 my_co_process: integer; // Количество процессов в системе
На самом деле о процессах можно узнать гораздо больше информации, например, количество нитей (Threads), используемых процессом, размер занимаемой памяти и т.д., но сейчас задача другая - просто установить новый приоритет процессу.

Важное замечание: для Windows 9x переменная ID должна иметь тип Int64.

Получение списка процессов

type
  TForm1 = class(TForm)
  public
    { Public declarations }
    procedure MyGetListProcess; // получаем список процессов
  end;


procedure TForm1.MyGetListProcess;
var
  hSnapShot: THandle;
  lppe: TProcessEntry32;

  procedure _FillList;
  begin
    // увеличиваем счетчик процессов в системе
    inc(my_co_process);
    // заполняем рабочий массив
    my_pr[my_co_process].id := lppe.Th32ProcessID;
    my_pr[my_co_process].name := ExtractFileName(lppe.szExeFile);
    my_pr[my_co_process].priority := lppe.pcPriClassBase;
  end;

begin
  // создаем структуру для работы с процессами системы
  hSnapShot:= CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if hSnapShot <> INVALID_HANDLE_VALUE
    then
      begin
        // формируем список процессов
        my_co_process := 0;
        // обнуляем счетчик процессов
        lppe.dwSize := SizeOf(lppe);
        // получаем первый процесс в списке процессов и заполняем
        // рабочий массив
        if Process32First(hSnapShot, lppe)
          then _FillList;
        // идем по цепочке процессов в системе до тех пор, пока
        // не определим все процессы
        while Process32Next(hSnapShot, lppe) do
          _FillList;
       // освобождаем структуру для работы с процессами
       CloseHandle(hSnapShot);
     end
end;

Изменение приоритета процесса по его идентификатору ID

precedure ChangePr(i : integer);
var
  hPrcss : THandle; 
  prClass : DWORD;
begin
  // устанавливаем код приоритета для процесса
  prClass := IDLE_PRIORITY_CLASS;
  // открываем дескриптор процесса с идентификатором ID
  hPrcss:=OpenProcess(PROCESS_ALL_ACCESS, true, my_pr[i].id);
  try
    // меняем приоритет процесс на новый
    SetPriorityClass( hPrcss,  prClass);
  finally
    // закрываем дескриптор процесса
    CloseHandle(hPrcss);
  end;
end;

Существуют 4 базовых класса приоритетов процессов:

    IDLE_PRIORITY_CLASS, prClass = 4
    NORMAL_PRIORITY_CLASS, prClass = 8
    HIGH_PRIORITY_CLASS, prClass = 13
    REALTIME_PRIORITY_CLASS, prClass = 24

Использовать REALTIME_PRIORITY_CLASS на однопроцессорных системах не имеет смысла: операционная система не сможет нормально функционировать, и компьютер "зависнет".

Пример работы алгоритма изменения приоритета процесса.

Дополнительная информация на тему "работа с операционной системой Windows":


JavaScript — это язык веб-программирования, работающий на стороне клиента, позволяющий автоматизировать какую-либо деятельность на странице сайта, не нагружая сервер. Вся нагрузка лежит на компьютере пользователя. В нем можно создавать функции, а также использовать базовые алгоритмы, состоящие из следования-ветвления-цикла. Чаще всего программный код на языке JavaScript обрабатывается обычными веб-браузерами.

Интересные материалы на сайте:

Автор, разработчик: Шаров Евгений   (gcmsite@yandex.ru)
(c) 2000-2020 GCM-Site - системное и веб-программирование
Цитирование материалов сайта возможно только при наличии гиперссылки