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.