Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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