Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Назначение приоритета потоку



Назначение потоку приоритета происходит в два этапа. Во-первых, каждому процессу в момент создания присваивается класс приоритета. Узнать класс приоритета можно с помощью функции GetPriorityClass, а изменить - с помощью функции SetPriorityClass. Ниже приведены имена классов приоритета процессов, уровни приоритета и константы, которые используются с этими вышеупомянутыми функциями (как и с функцией CreateProcess).

 

Имя класса  приоритета   Уровень приоритета класса   Символьная константа  
Idle 4   IDLE_PRIORITY_CLASS=&H40
Normal 8   NORMAL_PRIORITY_CLASS=&H20
High 13   HIGH_ PRIORITY_CLASS=&H80
Realtime 24   REALTIME_ PRIORITY_CLASS=&H100

 

Большинство процессов должно получать класс уровня приоритета Normal (обычный). Однако некоторым приложениям, таким как приложения мониторинга системы, возможно, более уместно назначать приоритет Idle (ожидания). Назначения приоритета Realtime (реального времени) обычно следует избегать, потому что в этом случае потоки изначально получают приоритет более высокий, чем системные потоки, такие как потоки ввода от клавиатуры и мыши, очистки кэша и обработки нажатия клавиш Ctrl+Alt+Del. Такой приоритет может быть подходящим для краткосрочных, критичных к времени выполнения процессов, которые относятся к взаимодействию с аппаратурой.

При создании уровень приоритета потока по умолчанию устанавливается равным уровню класса приоритета процесса, создавшего данный поток. Тем не менее, можно использовать функцию SetThreadPriority, чтобы изменить приоритет потока:

 

BOOL SetThreadPriority (

Н ANDL Е hThread ,                   // Дескриптор потока
    int nPriority                            // Уровень приоритета потока

);

 

Параметр nPriority используется для изменения приоритета потока относительно приоритета процесса, которому принадлежит данный поток. Возможные значения параметра nPriority и эффект их воздействия на уровень приоритета потока приведены ниже:

_______________________________________________________________________

Константа                                                               Уровень приоритета потоков

_______________________________________________________________________

thread_priority_normal                    Уровень приоритета класса

thread_priority_above_normal  Уровень приоритета класса + 1

THREAD_PRIORITY_BELOW_N0RMAL  Уровень приоритета класса - 1

thread_priority_highest               Уровень приоритета класса + 2

THREAD _ PRIORITY _ LOWEST                     Уровень приоритета класса - 2

thread _ priority _ idle                           Устанавливает уровень приоритета 1 для всех классов приоритета процессов за исключением Realtime. В этом случае устанавливает уровень приоритета 16.

thread_priority_time_critical       Устанавливает уровень приоритета 15 для всех классов приоритета процессов за исключением Realtime. В этом случае устанавливает уровень приоритета 31.

____________________________________________________________________

                                                                                                         

 


Повышение приоритета потока и квант изменений приоритета

Диапазон приоритета от 1 до 15 известен как диапазон динамического приоритета, а диапазон от 16 до 31 - как диапазон приоритета реального времени .

В Windows NT приоритет потока, находящийся в динамическом диапазоне, может временно повышаться операционной системой.  Нижний уровень приоритета потока (установленный программистом с помощью API функции) называется уровнем его базового приоритетa. API функция Windows NT SetProcessPriorityBoost может использоваться для разрешения или запрещения временных изменений приоритета (priority boosting).

Бывают также случаи, когда кванты времени, выделяемые потоку, временно увеличиваются.

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

· если поток принадлежит приоритетному процессу, то есть процессу, окно которого активно и имеет фокус ввода;

· если поток первым вошел в состояние ожидания;

· если поток выходит из состояния ожидания;

· если поток совсем не получает процессорного времени.

 


Поделиться:



Последнее изменение этой страницы: 2019-03-20; Просмотров: 353; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.013 с.)
Главная | Случайная страница | Обратная связь