Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een asynchrone agent (of alleen agent) is een toepassingsonderdeel dat asynchroon werkt met andere agents om grotere rekentaken op te lossen. U kunt een agent beschouwen als een taak met een vaste levenscyclus. Een agent kan bijvoorbeeld gegevens lezen van een invoer-/uitvoerapparaat (zoals het toetsenbord, een bestand op schijf of een netwerkverbinding) en een andere agent kan actie uitvoeren op die gegevens zodra deze beschikbaar zijn. De eerste agent gebruikt bericht doorgeven om de tweede agent te informeren dat er meer gegevens beschikbaar zijn. De Taakplanner van de Gelijktijdigheidsruntime biedt een efficiënt mechanisme om agents in staat te stellen coöperatief te blokkeren en op te leveren zonder dat er minder efficiënte procesonderbreking nodig is.
De bibliotheek voor agents definieert de concurrency::agent-klasse die een asynchrone agent vertegenwoordigt.
agent is een abstracte klasse die de virtuele methode concurrency::agent::run declareert. Met de run-methode wordt de taak uitgevoerd door de agent. Omdat run abstract is, moet u deze methode implementeren in elke klasse die u hebt afgeleid van agent.
Levenscyclus van agent
Agents hebben een vaste levenscyclus. De concurrency::agent_status opsomming definieert de verschillende toestanden van een agent. De volgende afbeelding is een statusdiagram dat laat zien hoe agents van de ene status naar de andere gaan. In deze afbeelding vertegenwoordigen ononderbroken lijnen methoden die u vanuit uw toepassing aanroept; stippellijnen vertegenwoordigen methoden die worden aangeroepen vanuit de runtime.
In de volgende tabel wordt elke status in de agent_status opsomming beschreven.
| Agentstatus | Beschrijving |
|---|---|
agent_created |
De agent is niet gepland voor uitvoering. |
agent_runnable |
De runtime plant de uitvoering van de agent in. |
agent_started |
De agent is gestart en wordt uitgevoerd. |
agent_done |
De agent heeft het afgerond. |
agent_canceled |
De agent is geannuleerd voordat deze de started status heeft ingevoerd. |
agent_createdis de initiële status van een agent en agent_runnableagent_started zijn de actieve statussen en agent_doneagent_canceled zijn de terminalstatussen.
Gebruik de concurrency::agent::status methode om de huidige status van een agent object op te halen. Hoewel de status methode gelijktijdigheidsveilig is, kan de status van de agent worden gewijzigd op het moment dat de status methode wordt geretourneerd. Een agent kan bijvoorbeeld in de agent_started status zijn wanneer u de status methode aanroept, maar naar de agent_done status gaan net nadat de status methode is geretourneerd.
Methoden en functies
In de volgende tabel ziet u enkele van de belangrijke methoden die deel uitmaken van de agent klasse. Zie agent voor meer informatie over alle klassemethoden.
| Methode | Beschrijving |
|---|---|
| starten | Plant het agent object voor uitvoering en stelt het in op de agent_runnable status. |
| uitvoeren | Hiermee wordt de taak uitgevoerd die door het agent object moet worden uitgevoerd. |
| klaar | Hiermee verplaatst u een agent naar de agent_done status. |
| annuleren | Als de agent niet is gestart, annuleert deze methode de uitvoering van de agent en wordt deze ingesteld op de agent_canceled toestand. |
| status | Haalt de huidige status van het agent object op. |
| wachten | Wacht totdat het agent object de agent_done of agent_canceled status heeft ingevoerd. |
| wait_for_all | Wacht tot alle opgegeven agent objecten de agent_done-staat of de agent_canceled-staat hebben ingevoerd. |
| wachten_op_een | Wacht tot ten minste één van de opgegeven agent objecten de agent_done of agent_canceled status bereikt. |
Nadat u een agentobject hebt gemaakt, roept u de concurrency::agent::start methode aan om het in te plannen voor uitvoering. De runtime roept de run methode aan nadat de agent is gepland en ingesteld op de agent_runnable status.
De runtime beheert geen uitzonderingen die worden gegenereerd door asynchrone agents. Zie Uitzonderingsafhandeling voor meer informatie over het afhandelen van uitzonderingen en agents.
Voorbeeld
Zie Walkthrough: Een Agent-Based-toepassing maken voor een voorbeeld waarin wordt getoond hoe u een eenvoudige toepassing op basis van een agent maakt.