Event-driven-Architektur in C++: Wie man reaktiven Code schreibt

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum brauchen Sie eine Event-driven-Architektur in C++?

\n

Stellen Sie sich vor, Sie sind ein Orchesterdirigent. Sie spielen nicht selbst jedes Instrument, aber Ihr Taktstock schwingt eine Kette von Reaktionen los: Die Geigen beginnen zu singen, die Trommeln schlagen den Rhythmus. Event-driven-Architektur (ereignisgesteuerte Architektur) funktioniert nach dem gleichen Prinzip – es ist ein Ansatz, bei dem das System auf externe oder interne Ereignisse reagiert, anstatt ein vorgegebenes lineares Skript auszuführen.

\n

In der Welt von C++ wird dieser Programmierstil besonders wertvoll, wenn man schnelle, skalierbare und reaktionsfähige Anwendungen schreiben muss. Spiele-Engines, grafische Oberflächen, stark ausgelastete Server – überall dort, wo die Reaktion auf Benutzeraktionen oder Zustandsänderungen wichtig ist, ist der Event-driven-Ansatz unverzichtbar.

\n

In diesem Artikel werden wir nicht nur die Theorie behandeln, sondern echten Code schreiben, der zeigt, wie ereignisgesteuerte Programmierung in C++ langweiligen sequenziellen Code in einen lebendigen, reaktiven Organismus verwandelt.

\n\n

Was ist Event-driven-Architektur in einfachen Worten

\n

Event-driven Architecture ist ein Architekturmuster, bei dem Komponenten eines Systems über Ereignisse kommunizieren. Anstatt den Zustand eines Objekts aktiv abzufragen (Polling), abonnieren Sie einfach die Ereignisse, die Sie interessieren, und reagieren darauf.

\n\n

Schlüsselelemente des Ereignismodells

\n
    \n
  • Event (Ereignis) – ein Signal, dass etwas passiert ist (ein Button wurde geklickt, ein Paket ist angekommen, die Temperatur hat sich geändert)
  • \n
  • Event Producer (Quelle) – derjenige, der das Ereignis erzeugt
  • \n
  • Event Consumer (Abonnent) – derjenige, der das Ereignis verarbeitet
  • \n
  • Event Bus (Ereignisbus) – der zentrale Router, der Ereignisse an die Abonnenten zustellt
  • \n
  • Event Loop (Ereignisschleife) – eine Endlosschleife, die auf Ereignisse wartet und sie verteilt
  • \n
\n\n

Stellen Sie sich ein Smart Home vor. Ein Bewegungssensor (Quelle) erzeugt das Ereignis "Bewegung erkannt". Der Ereignisbus leitet dieses Ereignis an die Abonnenten weiter: die Kamera (Aufnahme starten) und die Lampe (Licht einschalten). Niemand fragt jemanden ab – alles geschieht automatisch.

\n\n

Warum C++ ideal für Event-driven-Systeme ist

\n

Manche könnten denken: "C++ ist doch eine low-level Sprache, wozu braucht man sie für reaktive Programmierung?" Tatsächlich bietet die ereignisgesteuerte Programmierung in C++ einzigartige Vorteile:

\n
    \n
  • Maximale Leistung – minimaler Overhead bei der Ereignisverteilung
  • \n
  • Vollständige Kontrolle über den Speicher – Sie entscheiden selbst, wie Sie Ressourcen verwalten
  • \n
  • Unterstützung für Multithreading – C++ ermöglicht den Aufbau verteilter Ereignissysteme
  • \n
  • Templates und Lambdas – leistungsstarke Werkzeuge für flexible Ereignisverarbeitung
  • \n
\n\n

Ein Event-driven-System in C++ von Grund auf schreiben

\n

Lassen Sie uns ein einfaches, aber funktionierendes Ereignissystem erstellen. Wir verwenden das Observer-Muster – die klassische Methode zur Implementierung eines Ereignismodells.

\n\n

Basisimplementierung: EventBus

\n

Beginnen wir mit der Erstellung eines zentralen Ereignisbusses, der Abonnenten speichert und Ereignisse verteilt.

\n\n
#include <iostream>\n#include <functional>\n#include <map>\n#include <vector>\n#include <any>\n#include <string>\n\n// Ereignistyp – der Einfachheit halber ein String\nusing EventType = std::string;\n\n// Handler-Typ – eine Funktion, die std::any akzeptiert\nusing EventHandler = std::function<void(const std::any&)>;\n\nclass EventBus {\nprivate:\n    std::map<EventType, std::vector<EventHandler>> handlers_;\n\npublic:\n    // Abonnement eines Ereignisses\n    void subscribe(const EventType& event, EventHandler handler) {\n        handlers_[event].push_back(handler);\n    }\n\n    // Veröffentli                

Blogs

Buchempfehlungen