Функция SetPriorityClass (processthreadsapi.h)
Задает класс приоритета для указанного процесса. Это значение вместе со значением приоритета каждого потока процесса определяет базовый уровень приоритета каждого потока.
Синтаксис
BOOL SetPriorityClass(
[in] HANDLE hProcess,
[in] DWORD dwPriorityClass
);
Параметры
[in] hProcess
Дескриптор процесса.
Дескриптор должен иметь право доступа к PROCESS_SET_INFORMATION . Дополнительные сведения см. в разделе Управление правами на доступ и безопасность процесса.
[in] dwPriorityClass
Класс приоритета для процесса. Этот параметр может принимать одно из указанных ниже значений.
Возвращаемое значение
Если функция выполняется успешно, возвращается ненулевое значение.
Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Комментарии
Каждый поток имеет базовый уровень приоритета, определяемый значением приоритета потока и классом приоритета его процесса. Система использует базовый уровень приоритета всех исполняемых потоков, чтобы определить, какой поток получает следующий срез времени ЦП. Функция SetThreadPriority позволяет задать базовый уровень приоритета потока относительно класса приоритета его процесса. Дополнительные сведения см. в разделе Приоритеты планирования.
Значения *_PRIORITY_CLASS влияют на приоритет планирования ЦП процесса. Для процессов, выполняющих фоновую работу, например файловый ввод-вывод, сетевой ввод-вывод или обработку данных, недостаточно настроить приоритет планирования ЦП; Даже процесс приоритета простоя ЦП может легко помешать быстродействию системы при использовании диска и памяти. Процессы, выполняющие фоновую работу, должны использовать значения PROCESS_MODE_BACKGROUND_BEGIN и PROCESS_MODE_BACKGROUND_END для корректировки приоритетов планирования ресурсов; Процессы, взаимодействующие с пользователем, не должны использовать PROCESS_MODE_BACKGROUND_BEGIN.
Если процесс находится в фоновом режиме обработки, новые потоки, которые он создает, также будут находиться в режиме фоновой обработки. Когда поток находится в фоновом режиме обработки, он должен свести к минимуму общий доступ к ресурсам, таким как критические разделы, кучи и дескрипторы, с другими потоками в процессе, в противном случае могут возникнуть инверсии приоритета. Если потоки выполняются с высоким приоритетом, поток в режиме фоновой обработки может быть не запланирован быстро, но он никогда не будет голодать.
Каждый поток может переходить в режим фоновой обработки независимо с помощью SetThreadPriority. Не вызывайте Метод SetPriorityClass для входа в режим фоновой обработки после того, как поток в процессе вызвал SetThreadPriority , чтобы перейти в режим фоновой обработки. После завершения фонового режима обработки процесс сбрасывает все потоки в процессе; однако процесс не может узнать, какие потоки уже находились в фоновом режиме обработки.
Примеры
В следующем примере показано использование фонового режима процесса.
#include <windows.h>
#include <tchar.h>
int main( void )
{
DWORD dwError, dwPriClass;
if(!SetPriorityClass(GetCurrentProcess(), PROCESS_MODE_BACKGROUND_BEGIN))
{
dwError = GetLastError();
if( ERROR_PROCESS_MODE_ALREADY_BACKGROUND == dwError)
_tprintf(TEXT("Already in background mode\n"));
else _tprintf(TEXT("Failed to enter background mode (%d)\n"), dwError);
goto Cleanup;
}
// Display priority class
dwPriClass = GetPriorityClass(GetCurrentProcess());
_tprintf(TEXT("Current priority class is 0x%x\n"), dwPriClass);
//
// Perform background work
//
;
if(!SetPriorityClass(GetCurrentProcess(), PROCESS_MODE_BACKGROUND_END))
{
_tprintf(TEXT("Failed to end background mode (%d)\n"), GetLastError());
}
Cleanup:
// Clean up
;
return 0;
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | processthreadsapi.h (включая Windows.h в Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2) |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |