다음을 통해 공유


Scheduler 클래스

동시성 런타임 스케줄러에 대한 추상화를 나타냅니다.

구문

class Scheduler;

멤버

보호된 생성자

속성 설명
Scheduler 클래스의 Scheduler 개체는 팩터리 메서드를 사용하거나 암시적으로만 만들 수 있습니다.
~Scheduler 소멸자 클래스의 개체는 클래스에 Scheduler 대한 모든 외부 참조가 더 이상 존재하지 않을 때 암시적으로 제거됩니다.

공용 메서드

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

설명

동시성 런타임 스케줄러는 스레드와 같은 운영 체제 실행 컨텍스트에 매핑되는 실행 컨텍스트를 사용하여 애플리케이션에서 대기 중인 작업을 실행합니다. 언제든지 스케줄러의 동시성 수준은 Resource Manager에서 부여한 가상 프로세서 수와 같습니다. 가상 프로세서는 처리 리소스에 대한 추상화이며 기본 시스템의 하드웨어 스레드에 매핑됩니다. 지정된 시간에 단일 스케줄러 컨텍스트만 가상 프로세서에서 실행할 수 있습니다.

동시성 런타임은 병렬 작업을 실행하는 프로세스당 기본 스케줄러를 만듭니다. 또한 고유한 스케줄러 인스턴스를 만들고 이 클래스를 사용하여 조작할 수 있습니다.

상속 계층 구조

Scheduler

요구 사항

헤더: concrt.h

네임스페이스: 동시성

Attach

스케줄러를 호출 컨텍스트에 연결합니다. 이 메서드가 반환되면 호출 컨텍스트는 스케줄러에서 관리되고 스케줄러는 현재 스케줄러가 됩니다.

virtual void Attach() = 0;

설명

스케줄러를 연결하면 스케줄러에 대한 참조가 암시적으로 배치됩니다.

나중에 스케줄러가 종료되도록 하려면 CurrentScheduler::D etach 메서드를 호출해야 합니다.

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

이 스케줄러가 호출 컨텍스트의 현재 스케줄러인 경우 이 메서드는 improper_scheduler_attach 예외를 throw합니다.

만들기

매개 변수에서 동작을 설명하는 _Policy 새 스케줄러를 만들고, 스케줄러에 초기 참조를 배치하고, 포인터를 반환합니다.

static Scheduler* __cdecl Create(const SchedulerPolicy& _Policy);

매개 변수

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

Return Value

새로 만든 스케줄러에 대한 포인터입니다. 이 Scheduler 개체에 배치된 초기 참조 수가 있습니다.

설명

메서드를 사용하여 Create 스케줄러를 만든 후에는 초기 참조 수를 제거하고 스케줄러를 종료할 수 있도록 하기 위해 나중에 특정 시점에 메서드를 호출 Release 해야 합니다.

이 메서드를 사용하여 만든 스케줄러는 호출 컨텍스트에 연결되지 않습니다. Attach 메서드를 사용하여 컨텍스트에 연결할 수 있습니다.

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

CreateScheduleGroup

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

virtual ScheduleGroup* CreateScheduleGroup() = 0;

virtual ScheduleGroup* CreateScheduleGroup(location& _Placement) = 0;

매개 변수

_배치
일정 그룹 내의 태스크가 실행을 기준으로 편향되는 위치에 대한 참조입니다.

Return Value

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

설명

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

이 스케줄러를 명시적으로 만든 경우 스케줄러에서 참조를 해제하기 전에 모든 참조를 해제하여 그룹 내의 그룹을 예약해야 합니다.

GetNumberOfVirtualProcessors

스케줄러의 현재 가상 프로세서 수를 반환합니다.

virtual unsigned int GetNumberOfVirtualProcessors() const = 0;

Return Value

스케줄러의 현재 가상 프로세서 수입니다.

GetPolicy

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

virtual SchedulerPolicy GetPolicy() const = 0;

Return Value

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

ID

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

virtual unsigned int Id() const = 0;

Return Value

스케줄러의 고유 식별자입니다.

IsAvailableLocation

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

virtual bool IsAvailableLocation(const location& _Placement) const = 0;

매개 변수

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

Return Value

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

설명

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

참조

스케줄러 참조 수를 증분합니다.

virtual unsigned int Reference() = 0 ;

Return Value

새로 증분된 참조 수입니다.

설명

일반적으로 컴퍼지션에 대한 스케줄러의 수명을 관리하는 데 사용됩니다. 스케줄러의 참조 횟수가 0이 되면 스케줄러가 종료되고 스케줄러의 모든 작업이 완료된 후 자체적으로 소멸합니다.

메서드를 호출 Reference 하기 전의 참조 수가 0이고 스케줄러가 소유하지 않은 컨텍스트에서 호출이 이루어지면 메서드는 improper_scheduler_reference 예외를 throw합니다.

RegisterShutdownEvent

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

virtual void RegisterShutdownEvent(HANDLE _Event) = 0;

매개 변수

_이벤트
스케줄러가 종료되고 자체 삭제될 때 런타임에서 신호를 받는 Windows 이벤트 개체에 대한 핸들입니다.

Release

스케줄러 참조 횟수를 감소시킵니다.

virtual unsigned int Release() = 0;

Return Value

새로 감소된 참조 수입니다.

설명

일반적으로 컴퍼지션에 대한 스케줄러의 수명을 관리하는 데 사용됩니다. 스케줄러의 참조 횟수가 0이 되면 스케줄러가 종료되고 스케줄러의 모든 작업이 완료된 후 자체적으로 소멸합니다.

ResetDefaultSchedulerPolicy

기본 스케줄러 정책을 런타임 기본값으로 다시 설정합니다. 다음에 기본 스케줄러가 만들어질 때 런타임 기본 정책 설정을 사용합니다.

static void __cdecl ResetDefaultSchedulerPolicy();

설명

이 메서드는 프로세스 내에 기본 스케줄러가 있는 동안 호출할 수 있습니다. 기존 기본 스케줄러의 정책에는 영향을 미치지 않습니다. 그러나 기본 스케줄러를 종료하고 나중에 새 기본값을 만들려는 경우 새 스케줄러는 런타임 기본 정책 설정을 사용합니다.

Scheduler

클래스의 Scheduler 개체는 팩터리 메서드를 사용하거나 암시적으로만 만들 수 있습니다.

Scheduler();

설명

이 프로세스의 기본 스케줄러는 스케줄러를 호출 컨텍스트에 연결해야 하는 많은 런타임 함수를 활용할 때 암시적으로 만들어집니다. PPL 및 에이전트 계층의 클래스 및 기능 내 CurrentScheduler 의 메서드는 일반적으로 암시적 첨부 파일을 수행합니다.

메서드 또는 Scheduler::Create 메서드를 통해 명시적으로 스케줄러를 CurrentScheduler::Create 만들 수도 있습니다.

~스케줄러

클래스의 개체는 클래스에 Scheduler 대한 모든 외부 참조가 더 이상 존재하지 않을 때 암시적으로 제거됩니다.

virtual ~Scheduler();

ScheduleTask

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

virtual void ScheduleTask(
    TaskProc _Proc,
    _Inout_opt_ void* _Data) = 0;

virtual void ScheduleTask(
    TaskProc _Proc,
    _Inout_opt_ void* _Data,
    location& _Placement) = 0;

매개 변수

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

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

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

SetDefaultSchedulerPolicy

사용자 정의 정책을 사용하여 기본 스케줄러를 만들 수 있습니다. 이 메서드는 프로세스 내에 기본 스케줄러가 없는 경우에만 호출할 수 있습니다. 기본 정책을 설정한 후에는 ResetDefaultSchedulerPolicy 메서드 또는 ResetDefaultSchedulerPolicy 메서드에 SetDefaultSchedulerPolicy 대한 다음 유효한 호출까지 계속 적용됩니다.

static void __cdecl SetDefaultSchedulerPolicy(const SchedulerPolicy& _Policy);

매개 변수

_정책
기본 스케줄러 정책으로 설정할 정책입니다.

설명

SetDefaultSchedulerPolicy 프로세스 내에 기본 스케줄러가 이미 있을 때 메서드가 호출되면 런타임은 default_scheduler_exists 예외를 throw합니다.

참고 항목

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