Condividi tramite


Classe agent

Classe destinata a essere usata come classe di base per tutti gli agenti indipendenti. Consente di nascondere lo stato ad altri agenti e di interagire attraverso il passaggio di messaggi.

Sintassi

class agent;

Membri

Costruttori pubblici

Nome Descrizione
agente Sovraccarico. Costruisce un agente.
~Distruttore agente Distrugge l'agente.

Metodi pubblici

Nome Descrizione
cancel Sposta un agente dallo stato agent_created o agent_runnable allo stato agent_canceled.
start Sposta un agente dallo stato agent_created allo stato agent_runnable e lo pianifica per esecuzione.
status Origine sincrona delle informazioni sullo stato dell'agente.
status_port Origine asincrona delle informazioni sullo stato dall'agente.
aspettare Attende il completamento dell'attività da parte di un agente.
wait_for_all Attende che tutti gli agenti specificati completino le attività.
wait_for_one Attende il completamento dell'attività da parte di uno degli agenti specificati.

Metodi protetti

Nome Descrizione
done Sposta un agente nello stato agent_done, a indicare che l'agente ha completato il proprio compito.
eseguire Rappresenta l'attività principale di un agente. run deve essere sottoposto a override in una classe derivata e specifica le operazioni che l'agente deve eseguire dopo l'avvio.

Osservazioni:

Per altre informazioni, vedere Agenti asincroni.

Gerarchia di ereditarietà

agent

Requisiti

Intestazione: agents.h

Spazio dei nomi: Concurrency

agente

Costruisce un agente.

agent();

agent(Scheduler& _PScheduler);

agent(ScheduleGroup& _PGroup);

Parametri

_PScheduler
Oggetto Scheduler all'interno del quale è pianificata l'attività di esecuzione dell'agente.

_PGroup
Oggetto ScheduleGroup all'interno del quale è pianificata l'attività di esecuzione dell'agente. L'oggetto Scheduler utilizzato è implicito nel gruppo di pianificazione.

Osservazioni:

Se non si specificano i parametri _PScheduler o _PGroup , il runtime usa l'utilità di pianificazione predefinita.

~agente

Distrugge l'agente.

virtual ~agent();

Osservazioni:

È un errore distruggere un agente che non si trova in uno stato terminale (sia agent_done che agent_canceled). Questa operazione può essere evitata attendendo che l'agente raggiunga uno stato terminale nel distruttore di una classe che eredita dalla classe agent.

annulla

Sposta un agente dallo stato agent_created o agent_runnable allo stato agent_canceled.

bool cancel();

Valore restituito

true se l'agente è stato cancellato, false in caso contrario. Non è possibile annullare un agente se è già stato avviato o è già stato terminato.

Operazione completata

Sposta un agente nello stato agent_done, a indicare che l'agente ha completato il proprio compito.

bool done();

Valore restituito

true se l'agente viene spostato nello agent_done stato, false in caso contrario. Non è possibile spostare un agente che è stato annullato nello agent_done stato .

Osservazioni:

Questo metodo deve essere chiamato alla fine del metodo run, quando sai che l'esecuzione del tuo agente è completata.

eseguire

Rappresenta l'attività principale di un agente. run deve essere sottoposto a override in una classe derivata e specifica le operazioni che l'agente deve eseguire dopo l'avvio.

virtual void run() = 0;

Osservazioni:

Lo stato dell'agente viene modificato a agent_started poco prima che questo metodo venga richiamato. Il metodo deve invocare done sull'agente con uno stato appropriato prima di restituire, e non deve generare alcuna eccezione.

Avvio

Sposta un agente dallo stato agent_created allo stato agent_runnable e lo pianifica per esecuzione.

bool start();

Valore restituito

true se l'agente è stato avviato correttamente, false in caso contrario. Non è possibile avviare un agente che è stato annullato.

stato

Origine sincrona delle informazioni sullo stato dell'agente.

agent_status status();

Valore restituito

Restituisce lo stato corrente dell'agente. Si noti che questo stato restituito potrebbe cambiare immediatamente dopo essere stato restituito.

stato_porta

Origine asincrona delle informazioni sullo stato dall'agente.

ISource<agent_status>* status_port();

Valore restituito

Restituisce un'origine messaggio che può inviare messaggi sullo stato corrente dell'agente.

attendere

Attende il completamento dell'attività da parte di un agente.

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

Parametri

_PAgent
Puntatore all'agente da attendere.

_Timeout
Tempo massimo di attesa, espresso in millisecondi.

Valore restituito

Stato agent_status dell'agente al termine dell'attesa. Può essere agent_canceled o agent_done.

Osservazioni:

Un'attività agente viene completata quando l'agente entra negli stati agent_canceled o agent_done.

Se il parametro _Timeout ha un valore diverso dalla costante COOPERATIVE_TIMEOUT_INFINITE, l'eccezione operation_timed_out viene generata se la quantità di tempo specificata scade prima che l'agente abbia completato l'attività.

wait_for_all

Attende che tutti gli agenti specificati completino le attività.

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);

Parametri

count
Numero di puntatori dell'agente presenti nella matrice _PAgents.

_PAgents
Matrice di puntatori agli agenti da attendere.

_PStatus
Puntatore a una matrice di stati dell'agente. Ogni valore di stato rappresenta lo stato dell'agente corrispondente quando il metodo restituisce.

_Timeout
Tempo massimo di attesa, espresso in millisecondi.

Osservazioni:

Un'attività agente viene completata quando l'agente entra nello stato agent_canceled o nello stato agent_done.

Se il parametro _Timeout ha un valore diverso dalla costante COOPERATIVE_TIMEOUT_INFINITE, l'eccezione operation_timed_out viene generata se la quantità di tempo specificata scade prima che l'agente abbia completato l'attività.

wait_for_one

Attende il completamento dell'attività da parte di uno degli agenti specificati.

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);

Parametri

count
Numero di puntatori agent presenti nell'array _PAgents.

_PAgents
Matrice di puntatori agli agenti da attendere.

_Stato
Riferimento a una variabile in cui verrà inserito lo stato dell'agente.

_Indice
Riferimento a una variabile in cui verrà inserito l'indice dell'agente.

_Timeout
Tempo massimo di attesa, espresso in millisecondi.

Osservazioni:

Un'attività di un agente viene completata quando l'agente raggiunge gli stati agent_canceled o agent_done.

Se il parametro _Timeout ha un valore diverso dalla costante COOPERATIVE_TIMEOUT_INFINITE, l'eccezione operation_timed_out viene generata se la quantità di tempo specificata scade prima che l'agente abbia completato l'attività.

Vedi anche

Spazio dei nomi concorrenza