Classe CurrentScheduler
Representa uma abstração para o agendador atual associado ao contexto de chamada.
Sintaxe
class CurrentScheduler;
Membros
Métodos públicos
Nome | Descrição |
---|---|
Criar | Cria um agendador cujo comportamento é descrito pelo parâmetro _Policy e o anexa ao contexto de chamada. O agendador que acaba de ser criado passará a ser o agendador atual para o contexto de chamada. |
CreateScheduleGroup | Sobrecarregado. Cria um grupo agendado dentro do agendador associado ao contexto de chamada. 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. |
Desanexar | Desanexa o agendador atual do contexto de chamada e restaura o agendador anexado anteriormente como o agendador atual, se houver um. Depois que esse método é retornado, o contexto de chamada é gerenciado pelo agendador anexado anteriormente ao contexto usando o método CurrentScheduler::Create ou Scheduler::Attach . |
Get | Retorna um ponteiro para o agendador associado ao contexto de chamada, também conhecido como o agendador atual. |
GetNumberOfVirtualProcessors | Retorna o número atual de processadores virtuais para o agendador associado ao contexto de chamada. |
GetPolicy | Retorna uma cópia da política com a qual o agendador atual foi criado. |
Id | Retorna um identificador exclusivo para o agendador atual. |
IsAvailableLocation | Determina se um determinado local está disponível no agendador atual. |
RegisterShutdownEvent | Faz com que o identificador de evento do Windows passado no parâmetro _ShutdownEvent seja sinalizado quando o agendador associado ao contexto atual é encerrado e se destrói. 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. |
ScheduleTask | Sobrecarregado. Agenda uma tarefa leve dentro do agendador associado ao contexto de chamada. 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. |
Comentários
Se não houver um agendador (confira Agendador) associado ao contexto de chamada, muitos métodos dentro da classe CurrentScheduler
resultarão no anexo do agendador padrão do processo. Isso também pode implicar que o agendador padrão do processo é criado durante essa chamada.
Hierarquia de herança
CurrentScheduler
Requisitos
Cabeçalho: concrt.h
Namespace: concurrency
Criar
Cria um agendador cujo comportamento é descrito pelo parâmetro _Policy
e o anexa ao contexto de chamada. O agendador que acaba de ser criado passará a ser o agendador atual para o contexto de chamada.
static void __cdecl Create(const SchedulerPolicy& _Policy);
Parâmetros
_Policy
A política do agendador que descreve o comportamento do agendador que acaba de ser criado.
Comentários
O anexo do agendador ao contexto de chamada coloca implicitamente uma contagem de referência no agendador.
Depois que um agendador for criado com o método Create
, você deverá chamar o método CurrentScheduler::Detach em algum momento no futuro 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 pode gerar uma variedade de exceções, incluindo scheduler_resource_allocation_error e invalid_scheduler_policy_value.
CreateScheduleGroup
Cria um grupo agendado dentro do agendador associado ao contexto de chamada. 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.
static ScheduleGroup* __cdecl CreateScheduleGroup();
static ScheduleGroup* __cdecl CreateScheduleGroup(location& _Placement);
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
Esse método fará com que o agendador padrão do processo seja criado e/ou anexado ao contexto de chamada se não houver nenhum agendador atualmente associado ao contexto de chamada.
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, desanexando o contexto atual dele.
Detach
Desanexa o agendador atual do contexto de chamada e restaura o agendador anexado anteriormente como o agendador atual, se houver um. Depois que esse método é retornado, o contexto de chamada é gerenciado pelo agendador anexado anteriormente ao contexto usando o método CurrentScheduler::Create
ou Scheduler::Attach
.
static void __cdecl Detach();
Comentários
O método Detach
remove implicitamente uma contagem de referência do agendador.
Se não houver nenhum agendador anexado ao contexto de chamada, chamar esse método resultará na geração de uma exceção scheduler_not_attached.
Chamar esse método de um contexto interno para e gerenciado por um agendador ou um contexto que foi anexado usando um método diferente dos métodos Scheduler::Attach ou CurrentScheduler::Create resultará na geração de uma exceção improper_scheduler_detach.
Obter
Retorna um ponteiro para o agendador associado ao contexto de chamada, também conhecido como o agendador atual.
static Scheduler* __cdecl Get();
Valor de retorno
Um ponteiro para o agendador associado ao contexto de chamada (o agendador atual).
Comentários
Esse método fará com que o agendador padrão do processo seja criado e/ou anexado ao contexto de chamada se não houver nenhum agendador atualmente associado ao contexto de chamada. Nenhuma referência adicional é colocada no objeto Scheduler
retornado por este método.
GetNumberOfVirtualProcessors
Retorna o número atual de processadores virtuais para o agendador associado ao contexto de chamada.
static unsigned int __cdecl GetNumberOfVirtualProcessors();
Valor de retorno
Se um agendador estiver associado ao contexto de chamada, o número atual de processadores virtuais para esse agendador; caso contrário, o valor -1
.
Comentários
Esse método não resultará em anexação do agendador se o contexto de chamada ainda não estiver associado a um agendador.
O valor retornado desse método é uma amostragem instantânea do número de processadores virtuais para o agendador associado ao contexto de chamada. Esse valor pode ficar obsoleto no momento em que é retornado.
GetPolicy
Retorna uma cópia da política com a qual o agendador atual foi criado.
static SchedulerPolicy __cdecl GetPolicy();
Valor de retorno
Uma cópia da política com a qual o agendador atual foi criado.
Comentários
Esse método fará com que o agendador padrão do processo seja criado e/ou anexado ao contexto de chamada se não houver nenhum agendador atualmente associado ao contexto de chamada.
ID
Retorna um identificador exclusivo para o agendador atual.
static unsigned int __cdecl Id();
Valor de retorno
Se um agendador estiver associado ao contexto de chamada, um identificador exclusivo para esse agendador; caso contrário, o valor -1
.
Comentários
Esse método não resultará em anexação do agendador se o contexto de chamada ainda não estiver associado a um agendador.
IsAvailableLocation
Determina se um determinado local está disponível no agendador atual.
static bool __cdecl IsAvailableLocation(const location& _Placement);
Parâmetros
_Placement
Uma referência ao local sobre o qual consultar o agendador atual.
Valor de retorno
Uma indicação de se o local especificado ou não pelo argumento _Placement
está disponível no agendador atual.
Comentários
Esse método não resultará em anexação do agendador se o contexto de chamada ainda não estiver associado a um agendador.
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.
RegisterShutdownEvent
Faz com que o identificador de evento do Windows passado no parâmetro _ShutdownEvent
seja sinalizado quando o agendador associado ao contexto atual é encerrado e se destrói. 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.
static void __cdecl RegisterShutdownEvent(HANDLE _ShutdownEvent);
Parâmetros
_ShutdownEvent
Um identificador para um objeto de evento do Windows que será sinalizado pelo runtime quando o agendador associado ao contexto atual for desligado e se destruir.
Comentários
Se não houver nenhum agendador anexado ao contexto de chamada, chamar esse método resultará na geração de uma exceção scheduler_not_attached.
ScheduleTask
Agenda uma tarefa leve dentro do agendador associado ao contexto de chamada. 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.
static void __cdecl ScheduleTask(
TaskProc _Proc,
_Inout_opt_ void* _Data);
static void __cdecl ScheduleTask(
TaskProc _Proc,
_Inout_opt_ void* _Data,
location& _Placement);
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.
Comentários
Esse método fará com que o agendador padrão do processo seja criado e/ou anexado ao contexto de chamada se não houver nenhum agendador atualmente associado ao contexto de chamada.
Confira também
Namespace de simultaneidade
Classe Scheduler
PolicyElementKey
Agendador de Tarefas