Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Klasa przeznaczona do użycia jako klasa bazowa dla wszystkich niezależnych agentów. Służy do ukrywania stanu przed innymi agentami i komunikacji poprzez przekazywanie wiadomości.
Składnia
class agent;
Członkowie
Konstruktory publiczne
| Nazwa/nazwisko | opis |
|---|---|
| agent | Przeciążone. Tworzy agenta. |
| ~agent Destruktor | Niszczy agenta. |
Metody publiczne
| Nazwa/nazwisko | opis |
|---|---|
| Anuluj | Przenosi agenta ze stanu agent_created lub agent_runnable do stanu agent_canceled. |
| start | Przenosi agenta ze stanu agent_created do stanu agent_runnable i planuje jego wykonanie. |
| status | Synchroniczne źródło informacji o stanie agenta. |
| status_port | Asynchroniczne źródło informacji o stanie agenta. |
| czekać | Czeka na ukończenie zadania agenta. |
| wait_for_all | Czeka na ukończenie zadań wszystkich określonych agentów. |
| wait_for_one | Czeka na ukończenie zadania przez dowolnego z określonych agentów. |
Metody chronione
| Nazwa/nazwisko | opis |
|---|---|
| gotowy | Przenosi agenta do stanu agent_done, wskazując, że agent zakończył działanie. |
| uruchom | Reprezentuje główne zadanie agenta.
run powinno być nadpisane w klasie pochodnej i określa, co agent powinien zrobić po jego zainicjowaniu. |
Uwagi
Aby uzyskać więcej informacji, zobacz Asynchroniczne agenty.
Hierarchia dziedziczenia
agent
Wymagania
Nagłówek: agents.h
Przestrzeń nazw: współbieżność
agent
Tworzy agenta.
agent();
agent(Scheduler& _PScheduler);
agent(ScheduleGroup& _PGroup);
Parametry
_PScheduler
Obiekt Scheduler, w którym zaplanowano zadanie wykonania agenta.
_PGroup
Obiekt ScheduleGroup, w którym zaplanowano zadanie wykonania agenta. Używany obiekt wynika z grupy harmonogramu.
Uwagi
Jeśli nie określisz parametrów _PScheduler lub _PGroup, środowisko uruchomieniowe używa domyślnego harmonogramu.
~agent
Niszczy agenta.
virtual ~agent();
Uwagi
Niszczenie agenta, który nie jest w terminalnym stanie (agent_done lub agent_canceled), jest błędem. Można tego uniknąć, czekając, aż agent osiągnie stan końcowy w destruktorze klasy dziedziczącej agent z klasy.
Anuluj
Przenosi agenta ze stanu agent_created lub agent_runnable do stanu agent_canceled.
bool cancel();
Wartość zwracana
true jeśli agent został anulowany, false w przeciwnym razie. Nie można anulować agenta, jeśli już został uruchomiony lub ukończony.
Gotowe
Przenosi agenta do stanu agent_done, wskazując, że agent zakończył działanie.
bool done();
Wartość zwracana
true jeśli agent zostanie przeniesiony do stanu agent_done, false w przeciwnym razie. Nie można przenieść do stanu agent_done agenta, który został anulowany.
Uwagi
Ta metoda powinna być wywoływana na końcu run metody, gdy masz pewność, że wykonanie agenta zostało zakończone.
przebieg
Reprezentuje główne zadanie agenta.
run powinno być nadpisane w klasie pochodnej i określa, co agent powinien zrobić po jego zainicjowaniu.
virtual void run() = 0;
Uwagi
Stan agenta jest zmieniany na agent_started tuż przed wywołaniem tej metody. Metoda powinna wywołać done agenta z odpowiednim stanem przed zwróceniem i może nie zgłaszać żadnych wyjątków.
start
Przenosi agenta ze stanu agent_created do stanu agent_runnable i planuje jego wykonanie.
bool start();
Wartość zwracana
true jeśli agent został uruchomiony poprawnie, false w innym przypadku. Nie można uruchomić agenta, który został anulowany.
stan
Synchroniczne źródło informacji o stanie agenta.
agent_status status();
Wartość zwracana
Zwraca bieżący stan agenta. Należy pamiętać, że ten zwrócony stan może ulec zmianie natychmiast po powrocie.
status_port
Asynchroniczne źródło informacji o stanie agenta.
ISource<agent_status>* status_port();
Wartość zwracana
Zwraca źródło komunikatów, które może wysyłać komunikaty o bieżącym stanie agenta.
czekać
Czeka na ukończenie zadania agenta.
static agent_status __cdecl wait(
_Inout_ agent* _PAgent,
unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);
Parametry
_PAgent
Wskaźnik na agenta, na którego należy czekać.
_Limit czasu
Maksymalny czas oczekiwania (w milisekundach).
Wartość zwracana
Stan agent_status agenta po zakończeniu oczekiwania. Może to być agent_canceled lub agent_done.
Uwagi
Zadanie agenta jest zakończone, kiedy agent wchodzi w stan agent_canceled lub agent_done.
Jeśli parametr _Timeout ma wartość inną niż stała COOPERATIVE_TIMEOUT_INFINITE, wyjątek operation_timed_out jest zgłaszany, jeśli określony czas wygasa przed ukończeniem zadania agenta.
wait_for_all
Czeka na ukończenie zadań wszystkich określonych agentów.
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
Liczba wskaźników agenta znajdujących się w tablicy _PAgents.
_PAgents
Tablica wskaźników do agentów, na które należy czekać.
_PStatus
Wskaźnik do tablicy stanów agenta. Każda wartość stanu będzie reprezentować stan odpowiedniego agenta, gdy metoda zwróci wartość .
_Limit czasu
Maksymalny czas oczekiwania (w milisekundach).
Uwagi
Zadanie agenta jest zakończone, gdy agent wprowadzi stany agent_canceled lub agent_done.
Jeśli parametr _Timeout ma wartość inną niż stała COOPERATIVE_TIMEOUT_INFINITE, wyjątek operation_timed_out jest zgłaszany, jeśli określony czas wygasa przed ukończeniem zadania agenta.
wait_for_one
Czeka na ukończenie zadania przez dowolnego z określonych agentów.
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
Liczba wskaźników agenta znajdujących się w tablicy _PAgents.
_PAgents
Tablica wskaźników do agentów, na które należy czekać.
_Stan
Odwołanie do zmiennej, w której zostanie umieszczony stan agenta.
_Indeks
Referencja do zmiennej, w której zostanie umieszczony indeks agenta.
_Limit czasu
Maksymalny czas oczekiwania (w milisekundach).
Uwagi
Zadanie agenta zostaje zakończone, kiedy agent wchodzi w stan agent_canceled lub agent_done.
Jeśli parametr _Timeout ma wartość inną niż stała COOPERATIVE_TIMEOUT_INFINITE, wyjątek operation_timed_out jest zgłaszany, jeśli określony czas wygasa przed ukończeniem zadania agenta.