Udostępnij za pośrednictwem


agent — Klasa

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.

Zobacz też

Przestrzeń nazw współbieżności