Динамическое изменение уровня приоритета потока

Уровень приоритета, получаемый комбинацией относительного приоритета потока и класса приоритета процесса, которому принадлежит данный поток, называют базовым уровнем приоритета потока. Иногда система изменяет уровень приоритета потока. Обычно это происходит в ответ на некоторые события, связанные с вводом выводом (например, на появление оконных сообщений или чтение с диска).

Система повышает приоритет только тех потоков, базовый уровень которых находится в пределах 1-15 Именно поэтому данный диапазон называется «областью динамического приоритета» (dynamic priority range). Система не допускает динамического повышения приоритета потока до уровней реального времени (более 15) Поскольку потоки с такими уровнями обслуживают системные функции, это ограничение не дает приложению нарушить работу операционной системы.

Для отключения механизма динамического изменения приоритета есть две функции:

BOOL SetProcessPriorityBoost(HANDLE hProcess, BOOL DisablePriontyBoost);

BOOL SetThreadPriorityBoost(HANDLE hThread, BOOL DisablePriorityBoost);

SetProcessPriorityBoost заставляет систему включить или отключить изменение приоритетов всех потоков в указанном процессе, a SetThreadPriorityBoost действует применительно к отдельным потокам. Эти функции имеют свои аналоги, позволяющие определять, разрешено или запрещено изменение приоритетов:

BOOL GetProcessPriorityBoost(HANDLE hProcess,

PBOOL pDisablePriorityBoost);

BOOL GeLThreadPriorityBoost(HANDLE hThread,

PBOOL pDisablePriorityBoost);

Каждой из этих двух функций передаётся описатель нужного процесса или потока и адрес переменной чипа BOOL, в которой и возвращается результат.

3 4 Задача синхронизации потоков


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: