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 contexto de execução.
Sintaxe
class Context;
Membros
Construtores Protegidos
| Nome | Description |
|---|---|
| ~Destruidor de Contexto |
Métodos Públicos
| Nome | Description |
|---|---|
| Bloquear | Bloqueia o contexto atual. |
| Contexto Atual | Devolve um ponteiro para o contexto atual. |
| GetId | Devolve um identificador para o contexto que é único dentro do escalonador ao qual o contexto pertence. |
| GetScheduleGroupId | Devolve um identificador para o grupo de agendamento em que o contexto está a trabalhar atualmente. |
| GetVirtualProcessorId | Devolve um identificador para o processador virtual onde o contexto está a ser executado. |
| Id | Devolve um identificador para o contexto atual que é único dentro do escalonador ao qual pertence o contexto atual. |
| IsCurrentTaskCollectionCanceling | Devolve uma indicação de se a coleção de tarefas que está atualmente a ser executada inline no contexto atual está em meio a um cancelamento ativo (ou estará em breve). |
| IsSynchronouslyBlocked | Determina se o contexto está ou não bloqueado de forma síncrona. Um contexto é considerado bloqueado síncronicamente se realizou explicitamente uma ação que levou ao bloqueio. |
| Sobresubscrever | Injeta um processador virtual adicional num agendador durante a duração de um bloco de código quando invocado num contexto a ser executado num dos processadores virtuais desse agendador. |
| ScheduleGroupId | Devolve um identificador para o grupo de agendamento em que o contexto atual está a trabalhar. |
| Desbloquear | Desbloqueia o contexto e faz com que se torne executável. |
| VirtualProcessorId | Devolve um identificador para o processador virtual onde o contexto atual está a ser executado. |
| Rendimento | Gera execução para que outro contexto possa ser executado. Se não houver outro contexto disponível para ceder, o escalonador pode ceder a outra linha de execução do sistema operativo. |
Observações
O agendador de tempo de execução de simultaneidade (ver Agendador) utiliza contextos de execução para processar o trabalho que está em fila na sua aplicação. Um thread Win32 é um exemplo de contexto de execução num sistema operativo Windows.
A qualquer momento, o nível de concorrência de um agendador é igual ao número de processadores virtuais concedidos 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 agendador é cooperativo por natureza e um contexto em execução pode ceder o seu processador virtual a um contexto diferente a qualquer momento, se desejar entrar num estado de espera. Quando a sua espera está satisfeita, não pode retomar até que um processador virtual disponível do escalonador comece a executá-lo.
Hierarquia de herança
Context
Requerimentos
Cabeçalho: concrt.h
Namespace: simultaneidade
Block
Bloqueia o contexto atual.
static void __cdecl Block();
Observações
Este método resultará na criação e/ou anexação do agendador padrão do processo ao contexto de chamada se não houver agendador atualmente associado ao contexto de chamada.
Se o contexto de chamada estiver a correr num processador virtual, o processador virtual encontrará outro contexto executável para executar ou pode potencialmente criar um novo.
Depois de o método Block ter sido chamado ou será chamado, deve associá-lo a uma chamada ao método Unblock a partir de outro contexto de execução para que possa ser executado novamente. Tenha em atenção que existe um período crítico entre o momento em que o seu código publica o seu contexto para outro thread poder chamar o método Unblock e o momento em que é feita a chamada ao método Block. Durante este período, não deve chamar nenhum método que possa, por sua vez, bloquear e desbloquear por razões próprias (por exemplo, adquirir um bloqueio). As chamadas ao Block método e Unblock não rastreiam a razão do bloqueio e desbloqueio. Apenas um objeto deve ter posse de um Block- Unblock par.
Este método pode lançar várias exceções, incluindo scheduler_resource_allocation_error.
~Contexto
virtual ~Context();
Contexto Atual
Devolve um ponteiro para o contexto atual.
static Context* __cdecl CurrentContext();
Valor de retorno
Um indicador para o contexto atual.
Observações
Este método resultará na criação e/ou anexação do agendador padrão do processo ao contexto de chamada se não houver agendador atualmente associado ao contexto de chamada.
GetId
Devolve um identificador para o contexto que é único dentro do escalonador ao qual o contexto pertence.
virtual unsigned int GetId() const = 0;
Valor de retorno
Um identificador para o contexto que é exclusivo dentro do sistema de escalonamento ao qual o contexto pertence.
GetScheduleGroupId
Devolve um identificador para o grupo de agendamento em que o contexto está a trabalhar atualmente.
virtual unsigned int GetScheduleGroupId() const = 0;
Valor de retorno
Um identificador para o grupo de agendamento em que o contexto está atualmente a trabalhar.
Observações
O valor de retorno deste método é uma amostragem instantânea do grupo de agendamento sobre o qual o contexto está a ser executado. Se este método for chamado num contexto diferente do atual, o valor pode ficar obsoleto no momento em que é devolvido e não pode ser considerado confiável. Normalmente, este método é usado apenas para fins de depuração ou rastreamento.
GetVirtualProcessorId
Devolve um identificador para o processador virtual onde o contexto está a ser executado.
virtual unsigned int GetVirtualProcessorId() const = 0;
Valor de retorno
Se o contexto estiver atualmente a ser executado num processador virtual, um identificador para o processador virtual onde o contexto está a ser executado; caso contrário, o valor -1.
Observações
O valor de retorno deste método é uma amostragem instantânea do processador virtual onde o contexto está a ser executado. Este valor pode ficar obsoleto no momento em que é devolvido e não pode ser confiável. Normalmente, este método é usado apenas para fins de depuração ou rastreamento.
Id
Devolve um identificador para o contexto atual que é único dentro do escalonador ao qual pertence o contexto atual.
static unsigned int __cdecl Id();
Valor de retorno
Se o contexto atual estiver associado a um escalonador, então há um identificador único para o contexto dentro desse escalonador; caso contrário, o valor -1.
IsCurrentTaskCollectionCanceling
Devolve uma indicação de se a coleção de tarefas que está atualmente a ser executada inline no contexto atual está em meio a um cancelamento ativo (ou estará em breve).
static bool __cdecl IsCurrentTaskCollectionCanceling();
Valor de retorno
Se um escalonador estiver associado ao contexto de chamada e um grupo de tarefas estiver a executar uma tarefa em linha nesse contexto, deve ser indicado se esse grupo de tarefas está atualmente em processo de cancelamento ativo (ou estará em breve); caso contrário, o valor false.
IsSynchronouslyBlocked
Determina se o contexto está ou não bloqueado de forma síncrona. Um contexto é considerado bloqueado síncronicamente se realizou explicitamente uma ação que levou ao bloqueio.
virtual bool IsSynchronouslyBlocked() const = 0;
Valor de retorno
Se o contexto está bloqueado de forma síncrona.
Observações
Um contexto é considerado bloqueado síncronicamente se realizou explicitamente uma ação que levou ao bloqueio. No planeador de threads, isto indicaria uma chamada direta ao Context::Block método ou a um objeto de sincronização construído usando o Context::Block método.
O valor de retorno deste método é uma amostra instantânea de saber se o contexto está bloqueado de forma síncrona. Este valor pode ficar obsoleto no momento em que é devolvido e só pode ser usado em circunstâncias muito específicas.
Operador eliminar
Um Context objeto é destruído internamente pelo tempo de execução. Não pode ser explicitamente eliminado.
void operator delete(void* _PObject);
Parâmetros
_PObject
Um apontador para o objeto a ser eliminado.
Sobresubscrever
Injeta um processador virtual adicional num agendador durante a duração de um bloco de código quando invocado num contexto a ser executado num dos processadores virtuais desse agendador.
static void __cdecl Oversubscribe(bool _BeginOversubscription);
Parâmetros
_BeginOversubscription
Se true, indica que um processador virtual extra deve ser adicionado durante a duração da sobresubscrição. Se false, uma indicação de que a sobresubscrição deve terminar e o processador virtual anteriormente adicionado deve ser removido.
ID do Grupo de Agenda
Devolve um identificador para o grupo de agendamento em que o contexto atual está a trabalhar.
static unsigned int __cdecl ScheduleGroupId();
Valor de retorno
Se o contexto atual estiver ligado a um agendador e a trabalhar num grupo de agendamento, um identificador para o grupo de agendadores em que o contexto atual está a trabalhar; caso contrário, o valor -1.
Desbloquear
Desbloqueia o contexto e faz com que se torne executável.
virtual void Unblock() = 0;
Observações
É perfeitamente legal que uma chamada ao Unblock método venha antes de uma chamada correspondente ao método Block . Desde que as chamadas aos Block métodos e Unblock estejam devidamente emparelhadas, o runtime gere corretamente a raça natural de qualquer uma das ordens. Uma Unblock chamada que vem antes de uma Block chamada simplesmente anula o efeito da chamada Block .
Existem várias exceções que podem ser eliminadas deste método. Se um contexto tentar chamar o método Unblock em si próprio, uma exceção context_self_unblock será lançada. Se as chamadas para Block e Unblock não forem devidamente emparelhadas (por exemplo, se duas chamadas para Unblock forem feitas para um contexto que está atualmente em execução), será lançada uma exceção "context_unblock_unbalanced".
Tenha em atenção que existe um período crítico entre o momento em que o seu código publica o seu contexto para outro thread poder chamar o método Unblock e o momento em que é feita a chamada ao método Block. Durante este período, não deve chamar nenhum método que possa, por sua vez, bloquear e desbloquear por razões próprias (por exemplo, adquirir um bloqueio). As chamadas ao Block método e Unblock não rastreiam a razão do bloqueio e desbloqueio. Apenas um objeto deve ter propriedade sobre um par de Block e Unblock.
VirtualProcessorId
Devolve um identificador para o processador virtual onde o contexto atual está a ser executado.
static unsigned int __cdecl VirtualProcessorId();
Valor de retorno
Se o contexto atual estiver associado a um agendador, um identificador para o processador virtual onde o contexto atual está a ser executado; caso contrário, o valor -1.
Observações
O valor de retorno deste método é uma amostragem instantânea do processador virtual onde o contexto atual está a ser executado. Este valor pode ficar obsoleto no momento em que é devolvido e não pode ser confiável. Normalmente, este método é usado apenas para fins de depuração ou rastreamento.
Rendimento
Gera execução para que outro contexto possa ser executado. Se não houver outro contexto disponível para ceder, o escalonador pode ceder a outra linha de execução do sistema operativo.
static void __cdecl Yield();
Observações
Este método resultará na criação e/ou anexação do agendador padrão do processo ao contexto de chamada se não houver agendador atualmente associado ao contexto de chamada.
YieldExecution
Gera execução para que outro contexto possa ser executado. Se não houver outro contexto disponível para ceder, o escalonador pode ceder a outra linha de execução do sistema operativo.
static void __cdecl YieldExecution();
Observações
Este método resultará na criação e/ou anexação do agendador padrão do processo ao contexto de chamada se não houver agendador atualmente associado ao contexto de chamada.
Esta função é nova no Visual Studio 2015 e é idêntica à função Yield , mas não entra em conflito com a macro Yield no Windows.h.
Consulte também
concorrência Namespace
Classe Scheduler
Agendador de Tarefas