Функция
SetThreadPriorityФункция
SetThreadPriority устанавливает значение приоритета для заданного потока. Это значение, вместе с классом приоритета процесса потока, обуславливает базовый уровень приоритета потока.Синтаксис
SetThreadPriority(
); |
Параметры
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 |
Нет |
Замечания по платформе |
Не имеется |