Partilhar via


Classe Agendador

Representa uma abstração para um agendador de tempo de execução de concorrência.

Sintaxe

class Scheduler;

Membros

Construtores Protegidos

Nome Description
Agendador Um objeto da Scheduler classe só pode ser criado usando métodos de fábrica, ou implicitamente.
~Destrutor do Agendador Um objeto da Scheduler classe é implicitamente destruído quando todas as referências externas a ele deixam de existir.

Métodos Públicos

Nome Description
Anexar Anexa o agendador ao contexto de chamada. Depois que este método retorna, o contexto de chamada é gerido pelo escalonador e este torna-se o escalonador atual.
Create Cria um novo agendador cujo comportamento é descrito pelo _Policy parâmetro, coloca uma referência inicial no agendador e devolve um ponteiro para ele.
CreateScheduleGroup Sobrecarregado. Cria um novo grupo de horários dentro do agendador. A versão que utiliza o parâmetro _Placement faz com que as tarefas dentro do grupo de agendamento recém-criado sejam enviesadas para serem executadas na localização especificada por esse parâmetro.
GetNumberOfVirtualProcessors Devolve o número atual de processadores virtuais para o escalonador.
GetPolicy Devolve uma cópia da política que foi usada para criar o agendador.
Id Devolve um identificador único para o agendador.
IsAvailableLocation Determina se uma determinada localização está disponível no agendador.
Referência Incrementa a contagem de referências do escalonador.
RegisterShutdownEvent Faz com que o handle de eventos do Windows passado no parâmetro _Event seja ativado quando o agendador desliga e se destrói. No momento em que o evento é sinalizado, todo o trabalho agendado para o agendador está concluído. Múltiplos eventos de encerramento podem ser registados através deste método.
Lançamento Diminui a contagem de referências do agendador.
ResetDefaultSchedulerPolicy Reinicia a política padrão do escalonador para o padrão em tempo de execução. Da próxima vez que for criado um agendador predefinido, este usará as definições de política padrão em tempo de execução.
TarefaAgendada Sobrecarregado. Agenda uma tarefa leve no agendador. A tarefa leve será colocada num grupo de agendamento determinado pelo tempo de execução. A versão que utiliza o parâmetro _Placement faz com que a tarefa seja enviesada para ser executada no local especificado.
SetDefaultSchedulerPolicy Permite que uma política definida pelo utilizador seja usada para criar o escalonador predefinido. Este método só pode ser chamado quando não existe um escalonador padrão dentro do processo. Depois de definida uma política por defeito, esta permanece em vigor até à próxima chamada válida para o SetDefaultSchedulerPolicy ou o método ResetDefaultSchedulerPolicy.

Observações

O agendador do Runtime Concorrente utiliza contextos de execução, que correspondem aos contextos de execução do sistema operativo, como um thread, para executar o trabalho enfileirado a ele pela sua aplicação. A qualquer momento, o nível de concorrência de um escalonador é igual ao número de processadores virtuais atribuídos a ele pelo Gestor de Recursos. Um processador virtual é uma abstração de um recurso de processamento e mapeia para um thread de hardware no sistema subjacente. Apenas um único contexto de agendador pode ser executado num processador virtual num dado momento.

O Runtime de Concorrência criará um escalonador por padrão para cada processo executar tarefas paralelas. Além disso, pode criar as suas próprias instâncias de agendador e manipulá-las usando esta classe.

Hierarquia de herança

Scheduler

Requerimentos

Cabeçalho: concrt.h

Namespace: simultaneidade

Anexar

Anexa o agendador ao contexto de chamada. Depois deste método regressar, o contexto de chamada é gerido pelo escalonador e este torna-se o escalonador atual.

virtual void Attach() = 0;

Observações

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

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

Se este método for chamado a partir de um contexto que já está associado a outro agendador, o agendador existente é lembrado como o planeador anterior, e o planeador recém-criado torna-se o agendador atual. Quando chamas o CurrentScheduler::Detach método num ponto posterior, o agendador anterior é restaurado como o agendador atual.

Este método lançará uma exceção improper_scheduler_attach se este escalonador for o escalonador atual do contexto de chamada.

Criar

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

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

Parâmetros

_Política
A política do agendador que descreve o comportamento do agendador recém-criado.

Valor de retorno

Um apontador para um agendador recém-criado. Este Scheduler objeto tem um número inicial de referências atribuído.

Observações

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

Um agendador criado com este método não está associado ao contexto de chamada. Pode ser anexado a um contexto usando o método Attach .

Este método pode lançar várias exceções, incluindo scheduler_resource_allocation_error e invalid_scheduler_policy_value.

CriarGrupoDeAgenda

Cria um novo grupo de horários dentro do agendador. A versão que utiliza o parâmetro _Placement faz com que as tarefas dentro do grupo de agendamento recém-criado sejam enviesadas para serem executadas na localização especificada por esse parâmetro.

virtual ScheduleGroup* CreateScheduleGroup() = 0;

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

Parâmetros

_Posicionamento
Uma referência a um local para o qual as tarefas dentro do grupo de agendamento têm uma preferência em serem executadas.

Valor de retorno

Um apontador para o recém-criado grupo de agendamento. Este ScheduleGroup objeto tem uma contagem inicial de referências nele colocada.

Observações

Deve invocar o método Release num grupo de agendamento quando terminar de agendar o trabalho para ele. O agendador destrói o grupo de horários quando todo o trabalho em fila para ele estiver concluído.

Note que, se criou explicitamente este agendador, deve libertar todas as referências aos grupos de agendamento dentro dele, antes de libertar as suas referências no agendador.

GetNumberOfVirtualProcessors

Devolve o número atual de processadores virtuais para o escalonador.

virtual unsigned int GetNumberOfVirtualProcessors() const = 0;

Valor de retorno

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

GetPolicy

Devolve uma cópia da política que foi usada para criar o agendador.

virtual SchedulerPolicy GetPolicy() const = 0;

Valor de retorno

Uma cópia da política com que o programador de tarefas foi criado.

Id

Devolve um identificador único para o agendador.

virtual unsigned int Id() const = 0;

Valor de retorno

Um identificador único para o agendador.

EstáDisponívelLocalização

Determina se uma determinada localização está disponível no agendador.

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

Parâmetros

_Posicionamento
Uma referência à localização sobre a qual consultar o agendador.

Valor de retorno

Uma indicação de se a localização especificada pelo argumento _Placement está disponível ou não no escalonador.

Observações

Note-se que o valor de retorno é uma amostragem instantânea de se a localização dada está disponível. Na presença de múltiplos agendadores, a gestão dinâmica de recursos pode adicionar ou retirar recursos aos agendadores em qualquer momento. Se isso acontecer, a localização indicada pode alterar a disponibilidade.

Reference

Incrementa a contagem de referências do escalonador.

virtual unsigned int Reference() = 0 ;

Valor de retorno

A contagem de referências recentemente incrementada.

Observações

Isto é tipicamente usado para gerir a vida útil do agendador para composição. Quando a contagem de referência de um agendador cai para zero, este irá desligar-se e destruir-se após a conclusão de todo o trabalho no agendador.

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

Registo Evento de Encerramento

Faz com que o handle de eventos do Windows passado no parâmetro _Event seja ativado quando o agendador desliga e se destrói. No momento em que o evento é sinalizado, todo o trabalho agendado para o agendador está concluído. Múltiplos eventos de encerramento podem ser registados através deste método.

virtual void RegisterShutdownEvent(HANDLE _Event) = 0;

Parâmetros

_Event
Um handle para um objeto de evento do Windows que será sinalizado pelo runtime quando o escalonador se desliga e se destrói a si próprio.

Release

Diminui a contagem de referências do agendador.

virtual unsigned int Release() = 0;

Valor de retorno

A contagem de referência recentemente decrementada.

Observações

Isto é tipicamente usado para gerir a vida útil do agendador para composição. Quando a contagem de referência de um agendador cai para zero, este desliga-se e destrói-se a si próprio após toda a conclusão do trabalho no agendador.

ResetDefaultSchedulerPolicy

Reinicia a política padrão do escalonador para o padrão em tempo de execução. Da próxima vez que for criado um agendador predefinido, este usará as definições de política padrão em tempo de execução.

static void __cdecl ResetDefaultSchedulerPolicy();

Observações

Este método pode ser chamado enquanto existe um agendador padrão dentro do processo. Não afetará a política do agendador padrão existente. No entanto, se o agendador padrão desligasse e um novo padrão fosse criado mais tarde, o novo agendador usaria as definições de política padrão em tempo de execução.

Agendador

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

Scheduler();

Observações

O agendador padrão do processo é criado implicitamente quando se utilizam muitas das funções de execução que exigem que um agendador seja ligado ao contexto de chamada. Os métodos dentro da CurrentScheduler classe e das características das camadas PPL e agentes normalmente realizam ligação implícita.

Também podes criar um agendador explicitamente através do CurrentScheduler::Create método ou do método Scheduler::Create .

~Agendador

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

virtual ~Scheduler();

AgendaTarefa

Agenda uma tarefa leve no agendador. A tarefa leve será colocada num grupo de agendamento determinado pelo tempo de execução. A versão que utiliza o parâmetro _Placement faz com que a tarefa seja enviesada para ser executada 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 apontador para a função a executar para realizar o corpo da tarefa leve.

_Data
Um ponteiro de tipo void para os dados que serão passados como parâmetro para o corpo da tarefa.

_Posicionamento
Uma referência a um local onde a tarefa leve estará inclinada a ser executada.

SetDefaultSchedulerPolicy

Permite que uma política definida pelo utilizador seja usada para criar o escalonador predefinido. Este método só pode ser chamado quando não existe um escalonador padrão dentro do processo. Depois de definida uma política por defeito, esta permanece em vigor até à próxima chamada válida para o SetDefaultSchedulerPolicy ou o método ResetDefaultSchedulerPolicy.

static void __cdecl SetDefaultSchedulerPolicy(const SchedulerPolicy& _Policy);

Parâmetros

_Política
A política deve ser definida como política padrão do agendador.

Observações

Se o SetDefaultSchedulerPolicy método for chamado quando já existe um escalonador padrão dentro do processo, o runtime lançará uma exceção escalonador_padrão_existe.

Consulte também

concorrência Namespace
Classe Scheduler
PolicyElementKey
Agendador de Tarefas