agent – třída
Třída určená k použití jako základní třídy pro všechny nezávislé agenty. Slouží ke skrytí stavu před jinými agenty a interakci pomocí předávání zpráv.
Syntaxe
class agent;
Členové
Veřejné konstruktory
Název | Popis |
---|---|
agent | Přetíženo. Vytvoří agenta. |
~destruktor agenta | Zničí agenta. |
Veřejné metody
Název | Popis |
---|---|
zrušit | Přesune agenta agent_created agent_runnable z obou stavů do agent_canceled stavu. |
start | Přesune agenta agent_created ze stavu do agent_runnable stavu a naplánuje ho na spuštění. |
status | Synchronní zdroj informací o stavu z agenta. |
status_port | Asynchronní zdroj informací o stavu z agenta. |
Počkej | Čeká na dokončení úlohy agenta. |
wait_for_all | Čeká, až všichni zadaná agenta dokončí své úkoly. |
wait_for_one | Čeká, až některý ze zadaných agentů dokončí úlohu. |
Chráněné metody
Název | Popis |
---|---|
hotový | Přesune agenta do agent_done stavu, který označuje, že agent byl dokončen. |
Spusťte | Představuje hlavní úlohu agenta. run by měl být přepsán v odvozené třídě a určuje, co má agent dělat po spuštění. |
Poznámky
Další informace naleznete v tématu Asynchronní agenti.
Hierarchie dědičnosti
agent
Požadavky
Hlavička: agents.h
Namespace: souběžnost
agent
Vytvoří agenta.
agent();
agent(Scheduler& _PScheduler);
agent(ScheduleGroup& _PGroup);
Parametry
_PScheduler
Objekt Scheduler
, ve kterém je naplánovaná úloha provádění agenta.
_PGroup
Objekt ScheduleGroup
, ve kterém je naplánovaná úloha provádění agenta. Použitý Scheduler
objekt je odvozen ze skupiny plánů.
Poznámky
Modul runtime používá výchozí plánovač, pokud nezadáte _PScheduler
parametry._PGroup
~agent
Zničí agenta.
virtual ~agent();
Poznámky
Jedná se o chybu při zničení agenta, který není ve stavu terminálu (neboagent_done
).agent_canceled
Tomu se může vyhnout čekáním na to, aby agent dosáhl stavu terminálu v destruktoru třídy, která dědí z agent
třídy.
zrušit
Přesune agenta agent_created
agent_runnable
z obou stavů do agent_canceled
stavu.
bool cancel();
Návratová hodnota
true
pokud byl agent zrušen, false
jinak. Agenta nelze zrušit, pokud už byl spuštěný nebo už je dokončený.
Hotovo
Přesune agenta do agent_done
stavu, který označuje, že agent byl dokončen.
bool done();
Návratová hodnota
true
pokud je agent přesunut do agent_done
stavu, false
jinak. Agenta, který byl zrušen, nelze přesunout do agent_done
stavu.
Poznámky
Tato metoda by měla být volána na konci run
metody, když víte, že spuštění agenta bylo dokončeno.
příkaz Run
Představuje hlavní úlohu agenta. run
by měl být přepsán v odvozené třídě a určuje, co má agent dělat po spuštění.
virtual void run() = 0;
Poznámky
Stav agenta se změní agent_started
přímo před vyvolání této metody. Metoda by měla před vrácením vyvolat done
agenta s odpovídajícím stavem a nemusí vyvolat žádné výjimky.
start
Přesune agenta agent_created
ze stavu do agent_runnable
stavu a naplánuje ho na spuštění.
bool start();
Návratová hodnota
true
pokud se agent spustil správně, false
jinak. Agenta, který byl zrušen, nelze spustit.
stav
Synchronní zdroj informací o stavu z agenta.
agent_status status();
Návratová hodnota
Vrátí aktuální stav agenta. Všimněte si, že tento vrácený stav se může okamžitě po vrácení změnit.
status_port
Asynchronní zdroj informací o stavu z agenta.
ISource<agent_status>* status_port();
Návratová hodnota
Vrátí zdroj zprávy, který může odesílat zprávy o aktuálním stavu agenta.
wait
Čeká na dokončení úlohy agenta.
static agent_status __cdecl wait(
_Inout_ agent* _PAgent,
unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);
Parametry
_PAgent
Ukazatel na agenta, na který se má čekat.
_Přerušení zápasu
Maximální doba čekání v milisekundách.
Návratová hodnota
Agent agent_status
po dokončení čekání. Může to být agent_canceled
nebo agent_done
.
Poznámky
Úloha agenta se dokončí, když agent přejde do stavu agent_canceled
nebo agent_done
stavu.
Pokud má parametr _Timeout
jinou hodnotu než konstanta COOPERATIVE_TIMEOUT_INFINITE
, vyvolá se výjimka , operation_timed_out je vyvolán, pokud vyprší zadaná doba před dokončením úlohy agenta.
wait_for_all
Čeká, až všichni zadaná agenta dokončí své úkoly.
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);
Parametry
count
Počet ukazatelů agenta, které jsou přítomné v poli _PAgents
.
_PAgents
Pole ukazatelů na agenty, na které mají čekat.
_PStatus
Ukazatel na pole stavů agenta. Každá hodnota stavu bude představovat stav odpovídajícího agenta při vrácení metody.
_Přerušení zápasu
Maximální doba čekání v milisekundách.
Poznámky
Úloha agenta se dokončí, když agent přejde do stavu agent_canceled
nebo agent_done
stavu.
Pokud má parametr _Timeout
jinou hodnotu než konstanta COOPERATIVE_TIMEOUT_INFINITE
, vyvolá se výjimka , operation_timed_out je vyvolán, pokud vyprší zadaná doba před dokončením úlohy agenta.
wait_for_one
Čeká, až některý ze zadaných agentů dokončí úlohu.
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);
Parametry
count
Počet ukazatelů agenta, které jsou přítomné v poli _PAgents
.
_PAgents
Pole ukazatelů na agenty, na které mají čekat.
_Stav
Odkaz na proměnnou, kde bude umístěn stav agenta.
_Index
Odkaz na proměnnou, kde se umístí index agenta.
_Přerušení zápasu
Maximální doba čekání v milisekundách.
Poznámky
Úloha agenta se dokončí, když agent přejde do stavu agent_canceled
nebo agent_done
stavu.
Pokud má parametr _Timeout
jinou hodnotu než konstanta COOPERATIVE_TIMEOUT_INFINITE
, vyvolá se výjimka , operation_timed_out je vyvolán, pokud vyprší zadaná doba před dokončením úlohy agenta.