다음을 통해 공유


CurrentScheduler 클래스

호출 컨텍스트와 연결된 현재 스케줄러에 대한 추상화를 나타냅니다.

구문

class CurrentScheduler;

멤버

공용 메서드

이름 설명
만들기 매개 변수에서 동작을 설명하고 호출 컨텍스트에 _Policy 연결하는 새 스케줄러를 만듭니다. 새로 만든 스케줄러는 호출 컨텍스트의 현재 스케줄러가 됩니다.
CreateScheduleGroup 오버로드됨. 호출 컨텍스트와 연결된 스케줄러 내에 새 일정 그룹을 만듭니다. 매개 변수 _Placement 를 사용하는 버전은 새로 만든 일정 그룹 내의 작업이 해당 매개 변수로 지정된 위치에서 실행되는 쪽으로 편향됩니다.
Detach 호출 컨텍스트에서 현재 스케줄러를 분리하고, 현재 스케줄러가 있는 경우 이전에 연결된 스케줄러를 현재 스케줄러로 복원합니다. 이 메서드가 반환되면 호출 컨텍스트는 이전에 컨텍스트에 연결된 스케줄러에서 또는 Scheduler::Attach 메서드를 CurrentScheduler::Create 사용하여 관리됩니다.
가져오기 현재 스케줄러라고도 하는 호출 컨텍스트와 연결된 스케줄러에 대한 포인터를 반환합니다.
GetNumberOfVirtualProcessors 호출 컨텍스트와 연결된 스케줄러의 현재 가상 프로세서 수를 반환합니다.
GetPolicy 현재 스케줄러가 만들어진 정책의 복사본을 반환합니다.
ID 현재 스케줄러에 대한 고유 식별자를 반환합니다.
IsAvailableLocation 현재 스케줄러에서 지정된 위치를 사용할 수 있는지를 확인합니다.
RegisterShutdownEvent 현재 컨텍스트와 연결된 스케줄러가 종료되고 자체 삭제될 때 매개 변수에 전달 _ShutdownEvent 된 Windows 이벤트 핸들이 신호를 받을 수 있도록 합니다. 이벤트가 신호를 보낼 때 스케줄러로 예약된 모든 작업이 완료됩니다. 이 메서드를 통해 여러 종료 이벤트를 등록할 수 있습니다.
ScheduleTask 오버로드됨. 호출 컨텍스트와 연결된 스케줄러 내에서 경량 작업을 예약합니다. 간단한 작업은 런타임에 의해 결정되는 일정 그룹에 배치됩니다. _Placement 매개 변수를 사용하는 버전은 작업이 지정된 위치에서 실행되도록 합니다.

설명

호출 컨텍스트와 연결된 스케줄러(Scheduler 참조)가 없으면 클래스 내 CurrentScheduler 의 많은 메서드가 프로세스의 기본 스케줄러에 첨부됩니다. 이는 이러한 호출 중에 프로세스의 기본 스케줄러가 생성됨을 암시할 수도 있습니다.

상속 계층 구조

CurrentScheduler

요구 사항

헤더: concrt.h

네임스페이스: 동시성

만들기

매개 변수에서 동작을 설명하고 호출 컨텍스트에 _Policy 연결하는 새 스케줄러를 만듭니다. 새로 만든 스케줄러는 호출 컨텍스트의 현재 스케줄러가 됩니다.

static void __cdecl Create(const SchedulerPolicy& _Policy);

매개 변수

_정책
새로 만든 스케줄러의 동작을 설명하는 스케줄러 정책입니다.

설명

스케줄러를 호출 컨텍스트에 첨부하면 스케줄러에 대한 참조 수가 암시적으로 배치됩니다.

이 메서드를 사용하여 Create 스케줄러를 만든 후에는 스케줄러가 종료될 수 있도록 향후 특정 시점에 CurrentScheduler::D etach 메서드를 호출해야 합니다.

이미 다른 스케줄러에 연결된 컨텍스트에서 이 메서드를 호출하면 기존 스케줄러가 이전 스케줄러로 기억되고 새로 만든 스케줄러가 현재 스케줄러가 됩니다. 나중에 메서드를 CurrentScheduler::Detach 호출하면 이전 스케줄러가 현재 스케줄러로 복원됩니다.

이 메서드는 scheduler_resource_allocation_error 및 invalid_scheduler_policy_value 포함하여 다양한 예외를 throw할 수 있습니다.

CreateScheduleGroup

호출 컨텍스트와 연결된 스케줄러 내에 새 일정 그룹을 만듭니다. 매개 변수 _Placement 를 사용하는 버전은 새로 만든 일정 그룹 내의 작업이 해당 매개 변수로 지정된 위치에서 실행되는 쪽으로 편향됩니다.

static ScheduleGroup* __cdecl CreateScheduleGroup();

static ScheduleGroup* __cdecl CreateScheduleGroup(location& _Placement);

매개 변수

_배치
일정 그룹 내의 작업이 실행 쪽으로 편향되는 위치에 대한 참조입니다.

Return Value

새로 만든 일정 그룹에 대한 포인터입니다. 이 ScheduleGroup 개체에 배치된 초기 참조 수가 있습니다.

설명

이 메서드를 사용하면 현재 호출 컨텍스트와 연결된 스케줄러가 없는 경우 프로세스의 기본 스케줄러가 생성되고 호출 컨텍스트에 연결됩니다.

예약 작업이 완료되면 일정 그룹에서 Release 메서드를 호출해야 합니다. 스케줄러는 대기하는 모든 작업이 완료되면 일정 그룹을 삭제합니다.

이 스케줄러를 명시적으로 만든 경우 스케줄러에서 현재 컨텍스트를 분리하여 해당 스케줄러에서 참조를 해제하기 전에 해당 스케줄러 내에서 그룹을 예약하기 위해 모든 참조를 해제해야 합니다.

분리

호출 컨텍스트에서 현재 스케줄러를 분리하고, 현재 스케줄러가 있는 경우 이전에 연결된 스케줄러를 현재 스케줄러로 복원합니다. 이 메서드가 반환되면 호출 컨텍스트는 이전에 컨텍스트에 연결된 스케줄러에서 또는 Scheduler::Attach 메서드를 CurrentScheduler::Create 사용하여 관리됩니다.

static void __cdecl Detach();

설명

이 메서드는 Detach 스케줄러에서 참조 수를 암시적으로 제거합니다.

호출 컨텍스트에 연결된 스케줄러가 없는 경우 이 메서드를 호출하면 scheduler_not_attached 예외가 throw됩니다.

스케줄러에서 내부 및 관리되는 컨텍스트 또는 Scheduler::Attach 또는 CurrentScheduler::Create 메서드 이외의 메서드를 사용하여 연결된 컨텍스트에서 이 메서드를 호출하면 improper_scheduler_detach 예외가 throw됩니다.

가져오기

현재 스케줄러라고도 하는 호출 컨텍스트와 연결된 스케줄러에 대한 포인터를 반환합니다.

static Scheduler* __cdecl Get();

Return Value

호출 컨텍스트(현재 스케줄러)와 연결된 스케줄러에 대한 포인터입니다.

설명

이 메서드를 사용하면 현재 호출 컨텍스트와 연결된 스케줄러가 없는 경우 프로세스의 기본 스케줄러가 생성되고 호출 컨텍스트에 연결됩니다. 이 메서드에서 반환된 개체에 Scheduler 대한 추가 참조는 없습니다.

GetNumberOfVirtualProcessors

호출 컨텍스트와 연결된 스케줄러의 현재 가상 프로세서 수를 반환합니다.

static unsigned int __cdecl GetNumberOfVirtualProcessors();

Return Value

스케줄러가 호출 컨텍스트와 연결된 경우 해당 스케줄러의 현재 가상 프로세서 수입니다. 그렇지 않으면 값 -1입니다.

설명

호출 컨텍스트가 스케줄러와 아직 연결되지 않은 경우 이 메서드는 스케줄러 첨부 파일을 생성하지 않습니다.

이 메서드의 반환 값은 호출 컨텍스트와 연결된 스케줄러에 대한 가상 프로세서 수의 인스턴스 샘플링입니다. 이 값은 반환되는 순간 부실 값이 될 수 있습니다.

GetPolicy

현재 스케줄러가 만들어진 정책의 복사본을 반환합니다.

static SchedulerPolicy __cdecl GetPolicy();

Return Value

현재 스케줄러가 만들어진 정책의 복사본입니다.

설명

이 메서드를 사용하면 현재 호출 컨텍스트와 연결된 스케줄러가 없는 경우 프로세스의 기본 스케줄러가 생성되고 호출 컨텍스트에 연결됩니다.

ID

현재 스케줄러에 대한 고유 식별자를 반환합니다.

static unsigned int __cdecl Id();

Return Value

스케줄러가 호출 컨텍스트와 연결된 경우 해당 스케줄러에 대한 고유 식별자입니다. 그렇지 않으면 값 -1입니다.

설명

호출 컨텍스트가 스케줄러와 아직 연결되지 않은 경우 이 메서드는 스케줄러 첨부 파일을 생성하지 않습니다.

IsAvailableLocation

현재 스케줄러에서 지정된 위치를 사용할 수 있는지를 확인합니다.

static bool __cdecl IsAvailableLocation(const location& _Placement);

매개 변수

_배치
현재 스케줄러를 쿼리하는 위치에 대한 참조입니다.

Return Value

_Placement 인수로 지정된 위치를 현재 스케줄러에서 사용할 수 있는지 여부를 나타냅니다.

설명

호출 컨텍스트가 스케줄러와 아직 연결되지 않은 경우 이 메서드는 스케줄러 첨부 파일을 생성하지 않습니다.

반환 값은 지정된 위치를 사용할 수 있는지 여부의 순간 샘플링입니다. 여러 스케줄러가 있으면 동적 자원 관리에서 어느 시점에 스케줄러의 리소스를 추가하거나 제거할 수 있습니다. 이 경우 지정된 위치의 가용성이 변경될 수 있습니다.

RegisterShutdownEvent

현재 컨텍스트와 연결된 스케줄러가 종료되고 자체 삭제될 때 매개 변수에 전달 _ShutdownEvent 된 Windows 이벤트 핸들이 신호를 받을 수 있도록 합니다. 이벤트가 신호를 보낼 때 스케줄러로 예약된 모든 작업이 완료됩니다. 이 메서드를 통해 여러 종료 이벤트를 등록할 수 있습니다.

static void __cdecl RegisterShutdownEvent(HANDLE _ShutdownEvent);

매개 변수

_ShutdownEvent
현재 컨텍스트와 연결된 스케줄러가 종료되고 자체 삭제될 때 런타임에서 신호를 받는 Windows 이벤트 개체에 대한 핸들입니다.

설명

호출 컨텍스트에 연결된 스케줄러가 없는 경우 이 메서드를 호출하면 scheduler_not_attached 예외가 throw됩니다.

ScheduleTask

호출 컨텍스트와 연결된 스케줄러 내에서 경량 작업을 예약합니다. 간단한 작업은 런타임에 의해 결정되는 일정 그룹에 배치됩니다. _Placement 매개 변수를 사용하는 버전은 작업이 지정된 위치에서 실행되도록 합니다.

static void __cdecl ScheduleTask(
    TaskProc _Proc,
    _Inout_opt_ void* _Data);

static void __cdecl ScheduleTask(
    TaskProc _Proc,
    _Inout_opt_ void* _Data,
    location& _Placement);

매개 변수

_프로시저
경량 작업의 본문을 수행하기 위해 실행할 함수에 대한 포인터입니다.

_데이터
작업 본문에 매개 변수로 전달될 데이터에 대한 void 포인터입니다.

_배치
간단한 작업이 실행될 수 있는 위치에 대한 참조입니다.

설명

이 메서드를 사용하면 현재 호출 컨텍스트와 연결된 스케줄러가 없는 경우 프로세스의 기본 스케줄러가 생성되고 호출 컨텍스트에 연결됩니다.

참고 항목

concurrency 네임스페이스
Scheduler 클래스
PolicyElementKey
작업 Scheduler