Partilhar via


Estrutura IExecutionContext

Uma interface para um contexto de execução que pode ser executada em um determinado processador virtual e ser alternada de contexto cooperativamente.

Sintaxe

struct IExecutionContext;

Membros

Métodos públicos

Nome Descrição
IExecutionContext::Dispatch O método que é chamado quando um proxy de thread começa a executar um contexto de execução específico. Essa deve ser a principal rotina de trabalho do agendador.
IExecutionContext::GetId Retorna um identificador exclusivo para o contexto de execução.
IExecutionContext::GetProxy Retorna uma interface para o proxy de thread que está executando esse contexto.
IExecutionContext::GetScheduler Retorna uma interface ao agendador ao qual esse contexto de execução pertence.
IExecutionContext::SetProxy Associa um proxy de thread a esse contexto de execução. O proxy de thread associado invoca esse método logo antes de começar a executar o método Dispatch do contexto.

Comentários

Se você estiver implementando um agendador personalizado que faz interface com o Resource Manager do Runtime de Simultaneidade, será necessário implementar a interface IExecutionContext. Os threads criados pelo Resource Manager executam o trabalho em nome do agendador executando o método IExecutionContext::Dispatch.

Hierarquia de herança

IExecutionContext

Requisitos

Cabeçalho: concrtrm.h

Namespace: concurrency

Método IExecutionContext::D ispatch

O método que é chamado quando um proxy de thread começa a executar um contexto de execução específico. Essa deve ser a principal rotina de trabalho do agendador.

virtual void Dispatch(_Inout_ DispatchState* pDispatchState) = 0;

Parâmetros

pDispatchState
Um ponteiro para o estado sob o qual esse contexto de execução está sendo expedido. Para obter mais informações sobre o estado de expedição, consulte DispatchState.

Método IExecutionContext::GetId

Retorna um identificador exclusivo para o contexto de execução.

virtual unsigned int GetId() const = 0;

Valor de retorno

Um identificador inteiro exclusivo.

Comentários

Você deve usar o método GetExecutionContextId para obter um identificador exclusivo para o objeto que implementa a interface IExecutionContext, antes de usar a interface como um parâmetro para métodos fornecidos pelo Resource Manager. É esperado que você retorne o mesmo identificador quando a função GetId for invocada.

Um identificador obtido de uma fonte diferente pode resultar em um comportamento indefinido.

Método IExecutionContext::GetProxy

Retorna uma interface para o proxy de thread que está executando esse contexto.

virtual IThreadProxy* GetProxy() = 0;

Valor de retorno

Uma interface IThreadProxy. Se o proxy de thread do contexto de execução não tiver sido inicializado com uma chamada para SetProxy, a função deverá retornar NULL.

Comentários

O Resource Manager invocará o método SetProxy em um contexto de execução, com uma interface IThreadProxy como parâmetro, antes de inserir o método Dispatch no contexto. Espera-se que você armazene esse argumento e o retorne em chamadas para GetProxy().

Método IExecutionContext::GetScheduler

Retorna uma interface ao agendador ao qual esse contexto de execução pertence.

virtual IScheduler* GetScheduler() = 0;

Valor de retorno

Uma interface IScheduler.

Comentários

Você precisa inicializar o contexto de execução com uma interface IScheduler válida antes de usá-lo como parâmetro para métodos fornecidos pelo Resource Manager.

Método IExecutionContext::SetProxy

Associa um proxy de thread a esse contexto de execução. O proxy de thread associado invoca esse método logo antes de começar a executar o método Dispatch do contexto.

virtual void SetProxy(_Inout_ IThreadProxy* pThreadProxy) = 0;

Parâmetros

pThreadProxy
Uma interface para o proxy de thread que está prestes a inserir o método Dispatch neste contexto de execução.

Comentários

Espera-se que você salve o parâmetro pThreadProxy e o retorne em uma chamada ao método GetProxy. O Resource Manager garante que o proxy de thread associado ao contexto de execução não será alterado enquanto o proxy de thread estiver executando o método Dispatch.

Confira também

Namespace de simultaneidade
Estrutura IScheduler
Estrutura IThreadProxy