При запуске из оболочки командного
При запуске из оболочки командного
Создание эффективных Win32-приложений - ДЖ. Рихтер
Вам может показаться странным, что, создавая дочерний процесс, родительский сам устанавливает ему класс приоритета. За примером далеко ходить не надо — возьмем все тот же Explorer. При запуске из него какого-нибудь приложения новый процесс создается с обычным приоритетом. Но Explorer ведь не знает, что делает этот процесс и как часто его потокам надо выделять процессорное время. Поэтому в системе предусмотрена возможность изменения класса приоритета самим выполняемым процессом — вызовом функции SetPriorityClass:
BOOL SetPriorityClass(
HANDLE hProcess,
DWORD fdwPriority);
Эта функция меняет класс приоритета процесса, определяемого описателем hProcess, в соответствии со значением параметра fdwPriority. Последний должен содержать одно из значений, указанных в таблице выше. Поскольку SetPriorityClass принимает описатель процесса, Вы можете изменить приоритет любого процесса, выполняемого в системе, — если его описатель известен и у Вас есть соответствующие права доступа.
Обычно процесс пытается изменить свой класс приоритета. Вот как процесс может сам себе установить класс приоритета idle:
BOOL SetPriorityClass(GetCurrentProcess(), IDLE_PRIORITY_CLASS);
Парная ей функция GetPriorityClass позволяет узнать класс приоритета любого процесса:
DWORD GetPriorityClass(HANDLE hProcess);
Она возвращает, как Вы догадываетесь, один из ранее перечисленных флагов.
При запуске из оболочки командного процессора начальный приоритет программы тоже обычный. Однако, запуская ее командой Start, можно указать ключ, определяющий начальный приоритет. Так, следующая команда, введенная в оболочке командного процессора, заставит систему запустить приложение Calculator и присвоить ему приоритет idle:
C:\>START /LOW CALC.EXE