Share via


Classe Scheduler

Representa uma abstração para um agendador de Runtime de Simultaneidade.

Sintaxe

class Scheduler;

Membros

Construtores Protegidos

Nome Descrição
Agendador Um objeto da classe Scheduler só pode ser criado usando métodos de fábrica ou implicitamente.
~Destruidor do agendador Um objeto da classe Scheduler é implicitamente destruído quando todas as referências externas a ela deixam de existir.

Métodos públicos

Nome Descrição
Attach Anexa o agendador ao contexto de chamada. Depois que esse método é retornado, o contexto de chamada é gerenciado pelo agendador e o agendador se torna o agendador atual.
Criar Cria um novo agendador cujo comportamento é descrito pelo parâmetro _Policy, coloca uma referência inicial no agendador e retorna um ponteiro para ele.
CreateScheduleGroup Sobrecarregado. Cria um novo grupo de agendamento dentro do agendador. A versão que usa o parâmetro _Placement faz com que as tarefas dentro do grupo agendado que acaba de ser criado sejam tendenciosas em relação à execução no local especificado por esse parâmetro.
GetNumberOfVirtualProcessors Retorna o número atual de processadores virtuais para o agendador.
GetPolicy Retorna uma cópia da política com a qual o agendador foi criado.
Id Retorna um identificador exclusivo do agendador.
IsAvailableLocation Determina se um determinado local está disponível no agendador.
Referência Incrementa a contagem de referências do grupo agendado.
RegisterShutdownEvent Faz com que o identificador de evento do Windows passado no parâmetro _Event seja sinalizado quando o agendador for encerrado e se destruir. No momento em que o evento é sinalizado, todo o trabalho que tinha sido agendado para o agendador está concluído. Vários eventos de desligamento podem ser registrados por meio desse método.
Versão Decrementa a contagem de referência do agendador.
ResetDefaultSchedulerPolicy Redefine a política de agendador padrão para o padrão de runtime. Na próxima vez que um agendador padrão for criado, ele usará as configurações de política padrão do runtime.
ScheduleTask Sobrecarregado. Agenda uma tarefa leve dentro do agendador. A tarefa leve será colocada em um grupo agendado determinado pelo runtime. A versão que usa o parâmetro _Placement faz com que a tarefa seja tendenciosa em relação à execução no local especificado.
SetDefaultSchedulerPolicy Permite que uma política definida pelo usuário seja usada para criar o agendador padrão. Esse método só pode ser chamado quando nenhum agendador padrão existe dentro do processo. Depois que uma política padrão for definida, ela permanecerá em vigor até a próxima chamada válida para o método SetDefaultSchedulerPolicy ou o ResetDefaultSchedulerPolicy.

Comentários

O agendador do Runtime de Simultaneidade usa contextos de execução, que são mapeados para os contextos de execução do sistema operacional, como um thread, para executar o trabalho enfileirado por seu aplicativo. A qualquer momento, o nível de simultaneidade de um agendador é igual ao número de processadores virtuais concedidos a ele pelo Resource Manager. Um processador virtual é uma abstração para um recurso de processamento e mapeia para um thread de hardware no sistema subjacente. Somente um contexto de agendador pode ser executado em um processador virtual em um dado momento.

O Runtime de Simultaneidade criará um agendador padrão por processo para executar um trabalho paralelo. Além disso, você pode criar suas próprias instâncias de agendador e manipulá-las usando essa classe.

Hierarquia de herança

Scheduler

Requisitos

Cabeçalho: concrt.h

Namespace: concurrency

Anexar

Anexa o agendador ao contexto de chamada. Depois que esse método é retornado, o contexto de chamada é gerenciado pelo agendador e o agendador se torna o agendador atual.

virtual void Attach() = 0;

Comentários

Anexar um agendador coloca implicitamente uma referência no agendador.

Em algum momento no futuro, você deve chamar o método CurrentScheduler::Detach para permitir que o agendador seja desligado.

Se esse método for chamado de um contexto que já está anexado a um agendador diferente, o agendador existente será lembrado como o agendador anterior e o agendador que acaba de ser criado passará a ser o agendador atual. Quando você chama o método CurrentScheduler::Detach em um ponto posterior, o agendador anterior é restaurado como o agendador atual.

Esse método gerará uma exceção improper_scheduler_attach se esse agendador for o agendador atual do contexto de chamada.

Criar

Cria um novo agendador cujo comportamento é descrito pelo parâmetro _Policy, coloca uma referência inicial no agendador e retorna um ponteiro para ele.

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

Parâmetros

_Policy
A política do agendador que descreve o comportamento do agendador que acaba de ser criado.

Valor de Devolução

Um ponteiro para um agendador recém-criado. Esse objeto Scheduler tem uma contagem de referência inicial colocada nele.

Comentários

Depois que um agendador for criado com o método Create, você deverá chamar o método Release em algum momento no futuro para remover a contagem de referência inicial e permitir que o agendador seja desligado.

Um agendador criado com esse método não está anexado ao contexto de chamada. Ele pode ser anexado a um contexto usando o método Anexar.

Esse método pode gerar uma variedade de exceções, incluindo scheduler_resource_allocation_error e invalid_scheduler_policy_value.

CreateScheduleGroup

Cria um novo grupo de agendamento dentro do agendador. A versão que usa o parâmetro _Placement faz com que as tarefas dentro do grupo agendado que acaba de ser criado sejam tendenciosas em relação à execução no local especificado por esse parâmetro.

virtual ScheduleGroup* CreateScheduleGroup() = 0;

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

Parâmetros

_Placement
Uma referência a um local em que as tarefas dentro do grupo agendado serão tendenciosas em relação à execução.

Valor de Devolução

Um ponteiro para o grupo agendado que acaba de ser criado. Esse objeto ScheduleGroup tem uma contagem de referência inicial colocada nele.

Comentários

Você deve invocar o método Release em um grupo agendado quando terminar de agendar o trabalho para ele. O agendador destruirá o grupo agendado quando todo o trabalho enfileirado tiver sido concluído.

Observe que, se você criou explicitamente esse agendador, deverá liberar todas as referências aos grupos de agendamento dentro dele antes de liberar sua referência no agendador.

GetNumberOfVirtualProcessors

Retorna o número atual de processadores virtuais para o agendador.

virtual unsigned int GetNumberOfVirtualProcessors() const = 0;

Valor de Devolução

O número atual de processadores virtuais para o agendador.

GetPolicy

Retorna uma cópia da política com a qual o agendador foi criado.

virtual SchedulerPolicy GetPolicy() const = 0;

Valor de Devolução

Uma cópia da política com a qual o agendador foi criado.

ID

Retorna um identificador exclusivo do agendador.

virtual unsigned int Id() const = 0;

Valor de Devolução

Um identificador exclusivo do agendador.

IsAvailableLocation

Determina se um determinado local está disponível no agendador.

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

Parâmetros

_Placement
Uma referência ao local sobre o qual consultar o agendador.

Valor de Devolução

Uma indicação sobre o local ser especificado ou não pelo argumento _Placement está disponível no agendador.

Comentários

Observe que o valor retornado é uma amostragem instantânea de se o local determinado está disponível. Na presença de vários agendadores, o gerenciamento de recursos dinâmicos pode adicionar ou remover recursos de agendadores a qualquer momento. Se isso acontecer, o local determinado poderá alterar a disponibilidade.

Referência

Incrementa a contagem de referências do grupo agendado.

virtual unsigned int Reference() = 0 ;

Valor de Devolução

A contagem de referências incrementada recentemente.

Comentários

Normalmente, isso é usado para gerenciar o tempo de vida do agendador para composição. Quando a contagem de referência de um agendador cair para zero, o agendador será desligado e se destruirá após a conclusão de todo o trabalho no agendador.

O método gerará uma exceção improper_scheduler_reference se a contagem de referência antes de chamar o Reference método for zero e a chamada for feita a partir de um contexto que não pertence ao agendador.

RegisterShutdownEvent

Faz com que o identificador de evento do Windows passado no parâmetro _Event seja sinalizado quando o agendador for encerrado e se destruir. No momento em que o evento é sinalizado, todo o trabalho que tinha sido agendado para o agendador está concluído. Vários eventos de desligamento podem ser registrados por meio desse método.

virtual void RegisterShutdownEvent(HANDLE _Event) = 0;

Parâmetros

_Event
Um identificador para um objeto de evento do Windows que será sinalizado pelo runtime quando o agendador desligar e se destruir.

Versão

Decrementa a contagem de referência do agendador.

virtual unsigned int Release() = 0;

Valor de Devolução

A contagem de referências reduzida recentemente.

Comentários

Normalmente, isso é usado para gerenciar o tempo de vida do agendador para composição. Quando a contagem de referência de um agendador cair para zero, o agendador será desligado e se destruirá após a conclusão de todo o trabalho no agendador.

ResetDefaultSchedulerPolicy

Redefine a política de agendador padrão para o padrão de runtime. Na próxima vez que um agendador padrão for criado, ele usará as configurações de política padrão do runtime.

static void __cdecl ResetDefaultSchedulerPolicy();

Comentários

Esse método pode ser chamado enquanto um agendador padrão existe dentro do processo. Isso não afetará a política do agendador padrão existente. No entanto, se o agendador padrão fosse desligado e um novo padrão fosse criado posteriormente, o novo agendador usaria as configurações de política padrão do runtime.

Agendador

Um objeto da classe Scheduler só pode ser criado usando métodos de fábrica ou implicitamente.

Scheduler();

Comentários

O agendador padrão do processo é criado implicitamente quando você utiliza muitas das funções de runtime que exigem que um agendador seja anexado ao contexto de chamada. Métodos dentro da classe CurrentScheduler e recursos das camadas PPL e agentes normalmente executam anexo implícito.

Você também pode criar um agendador explicitamente por meio do método CurrentScheduler::Create ou do método Scheduler::Create.

~Agendador

Um objeto da classe Scheduler é implicitamente destruído quando todas as referências externas a ela deixam de existir.

virtual ~Scheduler();

ScheduleTask

Agenda uma tarefa leve dentro do agendador. A tarefa leve será colocada em um grupo agendado determinado pelo runtime. A versão que usa o parâmetro _Placement faz com que a tarefa seja tendenciosa em relação à execução no local especificado.

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

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

Parâmetros

_Proc
Um ponteiro para a função a ser empregada a fim de executar o corpo da tarefa leve.

_Data
Um ponteiro nulo para os dados que serão transmitidos como um parâmetro ao corpo da tarefa.

_Placement
Uma referência a um local para o qual a tarefa leve tenderá em relação à execução.

SetDefaultSchedulerPolicy

Permite que uma política definida pelo usuário seja usada para criar o agendador padrão. Esse método só pode ser chamado quando nenhum agendador padrão existe dentro do processo. Depois que uma política padrão for definida, ela permanecerá em vigor até a próxima chamada válida para o método SetDefaultSchedulerPolicy ou o ResetDefaultSchedulerPolicy.

static void __cdecl SetDefaultSchedulerPolicy(const SchedulerPolicy& _Policy);

Parâmetros

_Policy
A política a ser definida como a política de agendador padrão.

Comentários

Se o método SetDefaultSchedulerPolicy for chamado quando um agendador padrão já existir dentro do processo, o runtime lançará uma exceção default_scheduler_exists.

Confira também

Namespace de simultaneidade
Classe Scheduler
PolicyElementKey
Agendador de Tarefas