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