다음을 통해 공유


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

설정할 정보의 클래스입니다. 유일하게 지원되는 값은 ThreadMemoryPriorityThreadPowerThrottling입니다.

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)합니다.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

시스템 성능을 향상시키기 위해 애플리케이션은 ThreadMemoryPriority와 함께 SetThreadInformation 함수를 사용하여 백그라운드 작업을 수행하는 스레드의 메모리 우선 순위를 낮추거나 곧 다시 액세스할 것으로 예상되지 않는 파일 및 데이터에 액세스해야 합니다. 예를 들어 맬웨어 방지 애플리케이션은 파일 검사와 관련된 스레드의 우선 순위를 낮출 수 있습니다.

메모리 우선 순위 는 페이지가 잘리기 전에 프로세스의 작업 집합 에 남아 있는 기간을 결정하는 데 도움이 됩니다. 스레드의 메모리 우선 순위는 해당 스레드에서 설정한 프로세스 작업에 추가되는 물리적 페이지의 최소 우선 순위를 결정합니다. 메모리 관리자가 작업 집합을 자르면 우선 순위가 높은 페이지보다 낮은 우선 순위 페이지가 트리밍됩니다. 우선 순위가 높은 페이지가 작업 집합에서 잘릴 가능성이 적고 다시 액세스할 때 페이지 오류를 트리거하기 때문에 전반적인 시스템 성능이 향상됩니다.

ThreadPowerThrottling 을 사용하면 스레드에서 제한 정책을 사용할 수 있으며, 최적의 성능이 필요하지 않은 경우 성능과 전력 효율성의 균형을 맞추는 데 사용할 수 있습니다. 스레드가 를 사용하도록 설정 THREAD_POWER_THROTTLING_EXECUTION_SPEED하면 스레드는 EcoQoS로 분류됩니다. 시스템은 CPU 빈도를 줄이거나 전력 효율이 더 높은 코어를 사용하는 등의 전략을 통해 전력 효율성을 높이기 위해 노력할 것입니다. EcoQoS는 작업이 전경 사용자 환경에 기여하지 않을 때 사용해야 하며, 이는 배터리 수명을 연장하고 열과 팬 소음을 줄입니다. EcoQoS는 성능에 중요하거나 전경적인 사용자 환경에 사용하면 안 됩니다. (Windows 11 이전에는 EcoQoS 수준이 없었고 프로세스는 대신 LowQoS로 레이블이 지정되었습니다. 애플리케이션이 명시적으로 를 사용하도록 설정 THREAD_POWER_THROTTLING_EXECUTION_SPEED하지 않으면 시스템은 자체 추론을 사용하여 서비스 품질 수준을 자동으로 유추합니다. 자세한 내용은 서비스 품질을 참조하세요.

예제

다음 예제에서는 ThreadMemoryPriority를 사용하여 SetThreadInformation을 호출하여 현재 스레드에서 낮은 메모리 우선 순위를 설정하는 방법을 보여줍니다.

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);
}

다음 예제에서는 ThreadPowerThrottling을 사용하여 SetThreadInformation을 호출하여 스레드의 서비스 품질을 제어하는 방법을 보여줍니다.

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
헤더 processthreadsapi.h(Windows.h 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

GetThreadInformation

SetProcessInformation