Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Назначение приоритета потоку
Назначение потоку приоритета происходит в два этапа. Во-первых, каждому процессу в момент создания присваивается класс приоритета. Узнать класс приоритета можно с помощью функции GetPriorityClass, а изменить - с помощью функции SetPriorityClass. Ниже приведены имена классов приоритета процессов, уровни приоритета и константы, которые используются с этими вышеупомянутыми функциями (как и с функцией CreateProcess).
Большинство процессов должно получать класс уровня приоритета Normal (обычный). Однако некоторым приложениям, таким как приложения мониторинга системы, возможно, более уместно назначать приоритет Idle (ожидания). Назначения приоритета Realtime (реального времени) обычно следует избегать, потому что в этом случае потоки изначально получают приоритет более высокий, чем системные потоки, такие как потоки ввода от клавиатуры и мыши, очистки кэша и обработки нажатия клавиш Ctrl+Alt+Del. Такой приоритет может быть подходящим для краткосрочных, критичных к времени выполнения процессов, которые относятся к взаимодействию с аппаратурой. При создании уровень приоритета потока по умолчанию устанавливается равным уровню класса приоритета процесса, создавшего данный поток. Тем не менее, можно использовать функцию SetThreadPriority, чтобы изменить приоритет потока:
BOOL SetThreadPriority ( Н ANDL Е hThread , // Дескриптор потока );
Параметр 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; Просмотров: 364; Нарушение авторского права страницы