Программирование для Windows NT

Относительный приоритет задач


Как мы уже говорили, в рамках одного процесса может быть запущено несколько задач. Точно также как невозможно задать явным образом уровень приоритета процессов (лежащий в диапазоне значений от 1 до 31), невозможно задать и уровень приоритета задач, запущенных процессом. Вместо этого процесс при необходимости устанавливает функцией SetThreadPriority относительный приоритет задач, который может быть несколько ниже или выше приоритета процесса.

Указанной выше функции можно передать одно из следующих значений, определяющих новый приоритет задачи относительно приоритета процесса:

Значение

Относительное изменение уровня приоритета

THREAD_PRIORITY_TIME_CRITICAL

Устанавливается абсолютный уровень приоритета 15 или 31



THREAD_PRIORITY_HIGHEST

+2

THREAD_PRIORITY_ABOVE_NORMAL

+1

THREAD_PRIORITY_NORMAL

0

THREAD_PRIORITY_BELOW_NORMAL

-1

THREAD_PRIORITY_LOWEST

-2

THREAD_PRIORITY_IDLE

Устанавливается абсолютный уровень приоритета 1 или 16

Если процесс имеет класс приоритета, равный значению REALTIME_PRIORITY_CLASS, использование относительного приоритета THREAD_PRIORITY_TIME_CRITICAL приведет к тому, что уровень приоритета задачи будет равен 31. Если же это значение относительного приоритета укажет процесс более низкого класса приоритета, уровень приоритета задачи установится равным 15.

Для процесса с классом приоритета REALTIME_PRIORITY_CLASS использование относительного приоритета THREAD_PRIORITY_IDLE приведет к тому, что будет установлен уровень приоритета задачи, равный 16. Если же значение THREAD_PRIORITY_IDLE будет использовано менее приоритетным процессом, уровень приоритета задачи будет равен 1.

Операционная система может автоматически изменять приоритет задач, повышая его, когда задача начинает взаимодействовать с пользователем, а затем постепенно уменьшая. Приоритет задач, находящихся в состоянии ожидания, также уменьшается.

Процесс может запустить задачу, а потом увеличить ее приоритет. В этом случае главная задача процесса, запустившая более приоритетную задачу, будет временно приостановлена. Если же процесс запустит задачу и уменьшит ее приоритет таким образом, что он станет меньше приоритета главной задачи процесса, будет приостановлена запущенная задача.

В составе Resource Kit for Windows NT и в составе SDK поставляется приложение Process Viewer (рис. 2.2), пользуясь которым можно просмотреть и в некоторых случаях изменить приоритеты процессов и задач, а также получить другую информацию о запущенных задачах (использованное процессорное время с момента запуска, процент работы системного и пользовательского кода, использование виртуальной памяти и так далее).

Рис. 2.2. Приложение Process Viewer

С помощью этого приложения вы также можете завершить работу процесса, если возникнет такая необходимость.



Содержание раздела