Share via


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

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.

Get

Retorna um ponteiro para o agendador associado ao contexto de chamada, também conhecido como o agendador atual.

static Scheduler* __cdecl Get();

Valor de Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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