Compartilhar via


Classe agente

Uma classe destinada a ser usada como uma classe base para todos os agentes independentes. Ele é usado para ocultar o estado de outros agentes e interagir usando a passagem de mensagens.

Sintaxe

class agent;

Membros

Construtores públicos

Nome Descrição
agent Sobrecarregado. Constrói um agente.
Destruidor ~agent Destrói o agente.

Métodos públicos

Nome Descrição
cancel Move um agente dos estados agent_created ou agent_runnable para o estado agent_canceled.
start Move um agente do estado agent_created para o estado agent_runnable e agenda a execução dele.
status Uma fonte síncrona de informações sobre o status do agente.
status_port Uma fonte assíncrona de informações sobre o status do agente.
wait Aguarda um agente concluir sua tarefa.
wait_for_all Aguarda que todos os agentes especificados concluam suas tarefas.
wait_for_one Aguarda que qualquer um dos agentes especificados conclua sua tarefa.

Métodos protegidos

Nome Descrição
done Move um agente para o estado agent_done, indicando que o agente foi concluído.
run Representa a tarefa principal de um agente. run deve ser substituído em uma classe derivada e especifica o que o agente deve fazer depois de iniciado.

Comentários

Para saber mais, confira Agentes assíncronos.

Hierarquia de herança

agent

Requisitos

Cabeçalho: agents.h

Namespace: concurrency

agente

Constrói um agente.

agent();

agent(Scheduler& _PScheduler);

agent(ScheduleGroup& _PGroup);

Parâmetros

_PScheduler
O objeto Scheduler no qual a tarefa de execução do agente está agendada.

_PGroup
O objeto ScheduleGroup no qual a tarefa de execução do agente está agendada. O objeto Scheduler usado é implícito pelo grupo agendado.

Comentários

O runtime usará o agendador padrão se você não especificar os parâmetros _PScheduler ou _PGroup.

~agente

Destrói o agente.

virtual ~agent();

Comentários

É um erro destruir um agente que não está em um estado terminal (agent_done ou agent_canceled). Isso pode ser evitado aguardando que o agente chegue a um estado terminal no destruidor de uma classe herdada da classe agent.

cancel

Move um agente dos estados agent_created ou agent_runnable para o estado agent_canceled.

bool cancel();

Valor de retorno

true se o agente foi cancelado; caso contrário, false. Um agente não poderá ser cancelado se ele já tiver começado a ser executado ou já tiver sido concluído.

concluído

Move um agente para o estado agent_done, indicando que o agente foi concluído.

bool done();

Valor de retorno

true se o agente for movido para o agent_done estado; caso contrário, false. Um agente cancelado não pode ser movido para o estado agent_done.

Comentários

Esse método deve ser chamado no final do método run, quando você souber que a execução do agente foi concluída.

run

Representa a tarefa principal de um agente. run deve ser substituído em uma classe derivada e especifica o que o agente deve fazer depois de iniciado.

virtual void run() = 0;

Comentários

O status do agente é alterado para agent_started logo antes de esse método ser invocado. O método deve invocar done no agente com um status apropriado antes de retornar e não pode gerar exceções.

iniciar

Move um agente do estado agent_created para o estado agent_runnable e agenda a execução dele.

bool start();

Valor de retorno

true se o agente tiver começado corretamente; caso contrário, false. Um agente cancelado não pode ser iniciado.

status

Uma fonte síncrona de informações sobre o status do agente.

agent_status status();

Valor de retorno

Retorna o estado atual do agente. Observe que esse estado retornado pode ser alterado imediatamente após ser retornado.

status_port

Uma fonte assíncrona de informações sobre o status do agente.

ISource<agent_status>* status_port();

Valor de retorno

Retorna uma fonte de mensagem que pode enviar mensagens sobre o estado atual do agente.

wait

Aguarda um agente concluir sua tarefa.

static agent_status __cdecl wait(
    _Inout_ agent* _PAgent,
    unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);

Parâmetros

_PAgent
Um ponteiro para o agente aguardar.

_Timeout
O tempo máximo pelo qual aguardar, em milissegundos.

Valor de retorno

O agent_status do agente quando a espera for concluída. Pode ser agent_canceled ou agent_done.

Comentários

Uma tarefa de agente é concluída quando o agente entra no estado agent_canceled ou agent_done.

Se o parâmetro _Timeout tiver um valor diferente da constante COOPERATIVE_TIMEOUT_INFINITE, a exceção operation_timed_out será gerada se a quantidade de tempo especificada expirar antes de o agente concluir sua tarefa.

wait_for_all

Aguarda que todos os agentes especificados concluam suas tarefas.

static void __cdecl wait_for_all(
    size_t count,
    _In_reads_(count) agent** _PAgents,
    _Out_writes_opt_(count) agent_status* _PStatus = NULL,
    unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);

Parâmetros

count
O número de ponteiros do agente presentes na matriz _PAgents.

_PAgents
Uma matriz de ponteiros pelos quais os agentes devem aguardar.

_PStatus
Um ponteiro para uma matriz de status de agente. Cada valor de status representará o status do agente correspondente quando o método retornar.

_Timeout
O tempo máximo pelo qual aguardar, em milissegundos.

Comentários

Uma tarefa de agente é concluída quando o agente entra no estado agent_canceled ou agent_done.

Se o parâmetro _Timeout tiver um valor diferente da constante COOPERATIVE_TIMEOUT_INFINITE, a exceção operation_timed_out será gerada se a quantidade de tempo especificada expirar antes de o agente concluir sua tarefa.

wait_for_one

Aguarda que qualquer um dos agentes especificados conclua sua tarefa.

static void __cdecl wait_for_one(
    size_t count,
    _In_reads_(count) agent** _PAgents,
    agent_status& _Status,
    size_t& _Index,
    unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);

Parâmetros

count
O número de ponteiros do agente presentes na matriz _PAgents.

_PAgents
Uma matriz de ponteiros pelos quais os agentes devem aguardar.

_Status
Uma referência a uma variável em que o status do agente será colocado.

_Index
Uma referência a uma variável em que o índice do agente será colocado.

_Timeout
O tempo máximo pelo qual aguardar, em milissegundos.

Comentários

Uma tarefa de agente é concluída quando o agente entra no estado agent_canceled ou agent_done.

Se o parâmetro _Timeout tiver um valor diferente da constante COOPERATIVE_TIMEOUT_INFINITE, a exceção operation_timed_out será gerada se a quantidade de tempo especificada expirar antes de o agente concluir sua tarefa.

Confira também

Namespace de simultaneidade