Функция SetThreadAffinityMask (winbase.h)

Задает маску сходства процессора для указанного потока.

Синтаксис

DWORD_PTR SetThreadAffinityMask(
  [in] HANDLE    hThread,
  [in] DWORD_PTR dwThreadAffinityMask
);

Параметры

[in] hThread

Дескриптор для потока, для которого необходимо задать маску сходства.

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

Windows Server 2003 и Windows XP: Дескриптор должен иметь права доступа THREAD_SET_INFORMATION и THREAD_QUERY_INFORMATION .

[in] dwThreadAffinityMask

Маска сходства для потока.

В системе с более чем 64 процессорами маска сходства должна указывать процессоры в текущей группе процессоров потока.

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

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

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

Если маска сопоставления потоков запрашивает процессор, который не выбран для маски сходства процессов, последний код ошибки ERROR_INVALID_PARAMETER.

Комментарии

Маска сходства потоков — это битовый вектор, в котором каждый бит представляет логический процессор, на котором разрешено выполнять поток. Маска сходства потока должна быть подмножеством маски сходства процесса для содержащегося процесса потока. Поток может выполняться только на процессорах, на которые может выполняться его процесс. Таким образом, маска сходства потоков не может указать 1 бит для процессора, если маска сходства процесса задает 0 бит для этого процессора.

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

Если в новой маске сходства потоков не указан процессор, на котором в данный момент выполняется поток, поток перепланируется на одном из допустимых процессоров.

Начиная с Windows 11 и Windows Server 2022, в системе с более чем 64 процессорами сходство процессов и потоков по умолчанию охватывает все процессоры в системе во всех группах процессоров. DwThreadAffinityMask должен указывать процессоры в текущей основной группе потока.

Требования

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

См. также

GetProcessAffinityMask

Несколько процессоров

OpenThread

Функции процессов и потоков

Группы процессоров

SetProcessAffinityMask

SetThreadIdealProcessor

Потоки