AUTOSAR_EXP_ARAComAPI
FIG-cc83f25dbab6ee56
962 × 660 px
2 Release(s)
Figure 6.20: Returning Future with possibly unset result
SHA-256 Inhalts-Fingerabdruck:
cc83f25dbab6ee56f521895fc05f20a2e14b86b8cf8f4f2984cb326ed0f64a79
✦
KI-generierte Bildanalyse & technische Beschreibung
Modell: gemini-3.8-flash (via agy) · Rezept figure-description@2 · erstellt am 2026-10-07
1. Diagrammtyp & Architektur-Kontext
- Klassifikation: C++-Code-Listing / Entwurfsmuster-Illustration (Asynchrones Server-Methoden-Pattern via Promise/Future).
- Architektur-Kontext: AUTOSAR Adaptive Platform, Service-Oriented Communication (
ara::com). - Funktionaler Zweck: Entkopplung des IPC-/Netzwerk-Dispatchers von langlaufender Applikationslogik bei Methodenaufrufen am Service-Provider. Erlaubt die Rückgabe eines noch unvollständigen Ergebnisses (
ara::com::Future) an die Middleware, während die Berechnung asynchron in einem Hintergrundkontext abläuft.
2. Komponenten, Entitäten & Schnittstellen
RadarServiceSkeleton: Generierte Basisklasse der Adaptive Service Skeleton API für das Service-InterfaceRadarService.RadarServiceImpl: Anwenderspezifische Service-Provider-Klasse (public-Vererbung vonRadarServiceSkeleton).Adjust(const Position&): Öffentliche Service-Methode. Signatur liefertara::com::Future<AdjustOutput>, nimmt konstante Referenz aufPosition.ara::com::Promise<AdjustOutput>: Synchronisations- und Bereitstellungsobjekt zur Erzeugung des Shared States und Übergabe des Ausgabewertes.ara::com::Future<AdjustOutput>: Konsumenten-Handle für das asynchrone Operationsergebnis, das an den Aufrufer/Middleware zurückgegeben wird.std::thread t: Worker-Thread-Instanz zur asynchronen Ausführung vondoAdjustInternal().doAdjustInternal(const Position&): Private interne Berechnungsmethode mit synchroner Rückgabe vonAdjustOutput.
3. Dynamisches Verhalten & Sequenzablauf
- Methoden-Trigger: Eingehender Methodenaufruf via Middleware (z. B. SOME/IP Request Message Dispatcher) ruft synchron
RadarServiceImpl::Adjust()auf. - State-Initialisierung:
Promise<AdjustOutput>wird lokal auf dem Stack alloziert; das zugehörigeFuturewird viapromise.get_future()abgegriffen. - Thread-Spawn & Kontextübergabe: Neuer Ausführungskontext (
std::thread) wird gestartet. Die Ownership despromisewird viastd::move(promise)in den Thread-Closure übergeben;positionwird per Referenz gebunden. - Unmittelbare Rückgabe:
Adjust()gibt dasFuturesofort an die Skeleton-Laufzeitumgebung zurück, während der Ergebniswert noch nicht gesetzt ist (unset). Der aufrufende Dispatcher-Thread wird unmittelbar entlastet. - Asynchrone Ergebnisbereitstellung: Der Worker-Thread führt
doAdjustInternal()aus und setzt bei Fertigstellung den Rückgabewert viaprom.set_value(...). - Meldungsauslösung: Der zugrunde liegende Shared State signalisiert der
ara::com-Transportschicht die Verfügbarkeit, woraufhin die Response-Nachricht über das Netzwerk serialisiert und übertragen wird.
4. Normative Relevanz & Entwickler-Hinweise
- API-Spezifikation (
ara::com): Skeleton-Methoden dürfen gemäß AUTOSAR Adaptive Platform entweder bereits evaluierte oder unevaluierte Futures zurückgeben. Der Kommunikations-Stack serialisiert die Antwort erst, wenn der Wert im Shared State vorliegt. - Kritische Implementierungsfalle (Listing vs. Production Code):
- Thread-Lebensdauer: Das Deklarieren von
std::thread tals lokale Stack-Variable führt bei Funktionsende ohnet.detach()odert.join()unmittelbar zum Aufruf vonstd::terminate(). In Embedded-Systemen müssen Worker-Thread-Pools, Task-Queues oder OS-Tasks (POSIX / QNX Neutrino / Linux RT) genutzt werden. - Dangling References: Die Übergabe von
positionperstd::cref(position)in einen separaten Thread ist fehleranfällig, falls die Lebensdauer des Originalobjekts an den Scope des Dispatcher-Calls gebunden ist. Asynchrone Handler müssen Parameter per Value (Move/Copy) erfassen.
- Thread-Lebensdauer: Das Deklarieren von
- Fehlerbehandlung: Tritt in
doAdjustInternal()ein Fehler auf, muss anstelle vonset_value()zwingendset_error()bzw.set_exception()amPromiseaufgerufen werden, um der Middleware das Senden eines definiertenApplicationError(SOME/IP Error Response) zu ermöglichen. - Plattform-Evolution: Ab R18-11 bzw. R19-03 wurden die plattformspezifischen Typen
ara::com::Futureundara::com::Promisekonsolidiert und durchara::core::Future/ara::core::Promiseunter Verwendung vonara::core::Resultabgelöst.
Zugeordnete Anforderungen
Diese Angaben zeigt der Versions-Explorer.