Поделиться через


Функция SetThreadInformation (processthreadsapi.h)

Задает сведения для указанного потока.

Синтаксис

BOOL SetThreadInformation(
  [in] HANDLE                   hThread,
  [in] THREAD_INFORMATION_CLASS ThreadInformationClass,
       LPVOID                   ThreadInformation,
  [in] DWORD                    ThreadInformationSize
);

Параметры

[in] hThread

Дескриптор потока. Дескриптор должен иметь THREAD_SET_INFORMATION права доступа. Дополнительные сведения см. в разделе Безопасность потоков и права доступа.

[in] ThreadInformationClass

Класс сведений для задания. Поддерживаются только значения ThreadMemoryPriority и ThreadPowerThrottling.

ThreadInformation

Указатель на структуру, содержащую тип сведений, указанный параметром ThreadInformationClass .

Если параметр ThreadInformationClass имеет значение ThreadMemoryPriority, этот параметр должен указывать на MEMORY_PRIORITY_INFORMATION структуру.

Если параметр ThreadInformationClass имеет значение ThreadPowerThrottling, этот параметр должен указывать на THREAD_POWER_THROTTLING_STATE структуру.

[in] ThreadInformationSize

Размер структуры в байтах, заданной параметром ThreadInformation .

Если параметр ThreadInformationClass имеет значение ThreadMemoryPriority, этот параметр должен иметь значение sizeof(MEMORY_PRIORITY_INFORMATION).

Если параметр ThreadInformationClass имеет значение ThreadPowerThrottling, этот параметр должен иметь значение sizeof(THREAD_POWER_THROTTLING_STATE).

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

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

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

Комментарии

Чтобы повысить производительность системы, приложения должны использовать функцию SetThreadInformation с ThreadMemoryPriority , чтобы снизить приоритет памяти потоков, которые выполняют фоновые операции или обращаются к файлам и данным, которые не должны быть доступны в ближайшее время. Например, приложение для защиты от вредоносных программ может снизить приоритет потоков, участвующих в сканировании файлов.

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

ThreadPowerThrottling включает политики регулирования в потоке, которые можно использовать для балансировки производительности и энергоэффективности в тех случаях, когда оптимальная производительность не требуется. Когда поток выбирает включение THREAD_POWER_THROTTLING_EXECUTION_SPEED, поток будет классифицирован как EcoQoS. Система будет пытаться повысить энергоэффективность с помощью таких стратегий, как снижение частоты ЦП или использование более энергоэффективных ядер. EcoQoS следует использовать, если работа не способствует взаимодействию с пользователем на переднем плане, что обеспечивает более длительное время работы батареи и снижает уровень тепла и шума вентилятора. EcoQoS не следует использовать для критически важных для производительности или переднего плана взаимодействия пользователей. (До Windows 11 уровень EcoQoS не существовал, и вместо этого процесс был помечен как LowQoS. Если приложение явно не включает THREAD_POWER_THROTTLING_EXECUTION_SPEED, система будет использовать собственную эвристические средства для автоматического определения уровня качества обслуживания. Дополнительные сведения см. в разделе Качество обслуживания.

Примеры

В следующем примере показано, как вызвать SetThreadInformation с помощью ThreadMemoryPriority , чтобы задать низкий приоритет памяти в текущем потоке.

DWORD ErrorCode;
BOOL Success;
MEMORY_PRIORITY_INFORMATION MemPrio;

//
// Set low memory priority on the current thread.
//

ZeroMemory(&MemPrio, sizeof(MemPrio));
MemPrio.MemoryPriority = MEMORY_PRIORITY_LOW;

Success = SetThreadInformation(GetCurrentThread(),
                               ThreadMemoryPriority,
                               &MemPrio,
                               sizeof(MemPrio));

if (!Success) {
    ErrorCode = GetLastError();
    fprintf(stderr, "Set thread memory priority failed: %d\n", ErrorCode);
}

В следующем примере показано, как вызвать SetThreadInformation с threadPowerThrottling для управления качеством обслуживания потока.

THREAD_POWER_THROTTLING_STATE PowerThrottling;
ZeroMemory(&PowerThrottling, sizeof(PowerThrottling));
PowerThrottling.Version = THREAD_POWER_THROTTLING_CURRENT_VERSION;

//
// EcoQoS
// Turn EXECUTION_SPEED throttling on. 
// ControlMask selects the mechanism and StateMask declares which mechanism should be on or off.
//

PowerThrottling.ControlMask = THREAD_POWER_THROTTLING_EXECUTION_SPEED;
PowerThrottling.StateMask = THREAD_POWER_THROTTLING_EXECUTION_SPEED;

SetThreadInformation(GetCurrentThread(), 
                     ThreadPowerThrottling, 
                     &PowerThrottling, 
                     sizeof(PowerThrottling));

//
// HighQoS
// Turn EXECUTION_SPEED throttling off.
// ControlMask selects the mechanism and StateMask is set to zero as mechanisms should be turned off.
//

PowerThrottling.ControlMask = THREAD_POWER_THROTTLING_EXECUTION_SPEED;
PowerThrottling.StateMask = 0;

SetThreadInformation(GetCurrentThread(), 
                     ThreadPowerThrottling, 
                     &PowerThrottling, 
                     sizeof(PowerThrottling));

//
// Let system manage all power throttling. ControlMask is set to 0 as we don’t want 
// to control any mechanisms.
//

PowerThrottling.ControlMask = 0;
PowerThrottling.StateMask = 0;

SetThreadInformation(GetCurrentThread(), 
                     ThreadPowerThrottling, 
                     &PowerThrottling, 
                     sizeof(PowerThrottling));

Требования

Требование Значение
Минимальная версия клиента Windows 8 [только классические приложения]
Минимальная версия сервера Windows Server 2012 [только классические приложения]
Целевая платформа Windows
Header processthreadsapi.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

GetThreadInformation

SetProcessInformation