Функция SetThreadPriority


Функция SetThreadPriority устанавливает значение приоритета для заданного потока. Это значение, вместе с классом приоритета процесса потока, обуславливает базовый уровень приоритета потока.

Синтаксис

BOOL SetThreadPriority(

HANDLE hThread, // дескриптор потока

int nPriority   // уровень приоритета потока

);

Параметры

hThread

[in] Дескриптор потока, значение приоритета которого должно быть установлено.

Windows NT/2000/XP: Дескриптор должен иметь право доступа THREAD_SET_INFORMATION связанное с ним. Для получения дополнительной информации, см. статью Защита потока  и права доступа.

nPriority

[in] Значение приоритета для потока. Этот параметр может быть одним из следующих значений:

Приоритет

Предназначение

THREAD_PRIORITY_ABOVE_NORMAL

Приоритет на 1 пункт выше класса приоритета.

THREAD_PRIORITY_BELOW_NORMAL

Приоритет на 1 пункт ниже класса приоритета.

THREAD_PRIORITY_HIGHEST

Приоритет на 2 пункта выше класса приоритета.

THREAD_PRIORITY_IDLE

базовый приоритет 1 для процессов IDLE_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, ABOVE_NORMAL_PRIORITY_CLASS или HIGH_PRIORITY_CLASS и уровень базового приоритета 16 для процессов REALTIME_PRIORITY_CLASS.

THREAD_PRIORITY_LOWEST

Приоритет на 2 пункта ниже класса приоритета.

THREAD_PRIORITY_NORMAL

Нормальный приоритет класса приоритета.

THREAD_PRIORITY_TIME_CRITICAL

базовый приоритета 15 для процессов IDLE_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, ABOVE_NORMAL_PRIORITY_CLASS или HIGH_PRIORITY_CLASS и уровень базового приоритета 31 для процессов REALTIME_PRIORITY_CLASS.

Windows 2000/XP: этот параметр может быть также -7, -6, -5, -4, -3, 3, 4, 5, или 6. Для получения дополнительной информации, см. Приоритеты обслуживания.

Возвращаемые значения

Если функция завершается успешно, величина возвращаемого значения - не ноль.

Если функция завершается с ошибкой, величина возвращаемого значения - ноль. Чтобы получить дополнительные данные об ошибках, вызовите GetLastError.

Замечания

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

Функция SetThreadPriority дает возможность установки базового уровня приоритета потока относительно класса приоритета его процесса. Например, устанавливая THREAD_PRIORITY_HIGHEST при вызове SetThreadPriority для потока процесса IDLE_PRIORITY_CLASS базовый уровень приоритета потока устанавливается в значение 6. За таблицей, которая показывает, базовые уровни приоритета для каждой комбинации класса приоритета и значения приоритета потока, обратитесь к статье Приоритеты обслуживания.

Для процессов IDLE_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, ABOVE_NORMAL_PRIORITY_CLASS и HIGH_PRIORITY_CLASS, система динамически повышает (форсирует) базовый уровень приоритета потока, когда происходят события, которые являются важными для потока. Процессы REALTIME_PRIORITY_CLASS не получают динамического форсирования.

Все потоки вначале запускаются как THREAD_PRIORITY_NORMAL. Используйте функции GetPriorityClass и SetPriorityClass, чтобы получать и устанавливать класс приоритета процесса. Используйте функцию GetThreadPriority, чтобы получить значение приоритета потока.

Используйте класс приоритета процесса, чтобы различать между прикладными программами те, которые являются критическими по времени исполнения и те, которые требуют нормальной или ниже нормальной очередности обслуживания. Используйте значения приоритета потока, чтобы различать относительные приоритеты задач процесса. Например, поток, который обрабатывает ввод данных для окна, может иметь более высокий уровень приоритета, чем поток, который выполняет интенсивные вычисления для ЦПУ.

При управлении приоритетами, будьте очень осторожными, чтобы гарантировать, что высокоприоритетный поток не поглотит все доступное процессорное время. Поток с базовым уровнем приоритета более чем 11 мешает нормальным операциям операционной системы. Использование REALTIME_PRIORITY_CLASS может стать причиной, что буферы системы ввода-вывода не станут сбрасывать на диск, зависание мыши, и так далее.

Смотри также

Краткий обзор Процессы и потоки, Функции, используемые процессами и потоками, GetPriorityClass, GetThreadPriority, SetPriorityClass

Размещение и совместимость SetThreadPriority

Windows. NET Server

Да

Windows XP

Да

Windows 2000

Да

Windows NT

Да версии 3.1 и выше

Windows Me

Да

Windows 98

Да

Windows 95

Да

Используемая библиотека

Kernel32.lib

Заголовочный файл

 

- объявлено в

Winbase.h

- включено в

Windows.h

Unicode

Нет

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz