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
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.
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 retorno
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 retorno
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 retorno
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 retorno
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 retorno
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 retorno
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 retorno
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 retorno
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