<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Ereignis_%28Programmierung%29</id>
	<title>Ereignis (Programmierung) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Ereignis_%28Programmierung%29"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Ereignis_(Programmierung)&amp;action=history"/>
	<updated>2026-06-07T11:45:42Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Ereignis_(Programmierung)&amp;diff=169536&amp;oldid=prev</id>
		<title>imported&gt;Thomas Dresler: Kommasetzung</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Ereignis_(Programmierung)&amp;diff=169536&amp;oldid=prev"/>
		<updated>2024-04-14T08:41:59Z</updated>

		<summary type="html">&lt;p&gt;Kommasetzung&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Ein &amp;#039;&amp;#039;&amp;#039;Ereignis&amp;#039;&amp;#039;&amp;#039; ({{enS|&amp;#039;&amp;#039;event&amp;#039;&amp;#039;}}) dient in der [[Softwaretechnik]] –&amp;amp;nbsp;bei Entwicklung nach dem ereignisorientierten [[Programmierparadigma]]&amp;amp;nbsp;– zur Steuerung des [[Programmfluss]]es. Das Programm wird nicht linear durchlaufen, sondern es werden spezielle &amp;#039;&amp;#039;Ereignisbehandlungsroutinen&amp;#039;&amp;#039; (engl. &amp;#039;&amp;#039;listener&amp;#039;&amp;#039;, &amp;#039;&amp;#039;observer&amp;#039;&amp;#039;, &amp;#039;&amp;#039;event handler&amp;#039;&amp;#039;) immer dann ausgeführt, wenn ein bestimmtes &amp;#039;&amp;#039;Ereignis&amp;#039;&amp;#039; auftritt. Ereignisorientierte Programmierung gehört zu den [[Parallele Programmierung|parallelen Programmiertechniken]], hat also deren Vor- und Nachteile.&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
In [[Computerprogramm|Computerprogrammen]] kommt es häufig vor, dass auf Ressourcenanforderungen wie z. B. bei Speicheranforderungen und anderen Gerätezugriffen eine unvorhersagbar lange Zeit gewartet werden muss oder Ereignisse spontan auftreten können, z. B. [[Mausklick|Mausklicks]], das Drücken von [[Tastatur|Tasten]] oder [[Tastenkombination|Tastenkombinationen]] oder das Öffnen, das Schließen oder die Größenänderung oder Timer-Abläufe durch den Anwender. Bei älterer [[Programmierung]] ohne Ereignisse oder auch mit einem einzigen, sequentiellen [[Kontrollfluss]] wird dieses Warten auf das Eintreten des Ereignisses z. B. die erfolgreiche Ressourcenzuweisung über ein [[Aktives Warten|aktives, beobachtendes Warten]], das auch sogenannte &amp;#039;&amp;#039;[[Polling (Informatik)|Polling]]&amp;#039;&amp;#039;, durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Polling besitzt einige nachteilige Eigenschaften: Da die Programmausführung (scheinbar) solange angehalten wird, bis das Ereignis eintritt, ist die Programm-Leistungsfähigkeit schlechter und ebenso die Antwortzeiten nicht vorhersagbar. Auch kann auf andere Ereignisse, während des beobachtenden Wartens, gar nicht reagiert werden, d. h. diese gehen möglicherweise verloren. Und die Ausführung des beobachtenden Wartens benötigt unvorhersagbar viel [[Rechenzeit]], da dieselbe Handlung – die Prüfung, ob das Ereignis eingetreten ist – unvorhersagbar oft wiederholt werden muss.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
In der [[Programmierung]] ist ein &amp;#039;&amp;#039;Eventhandler&amp;#039;&amp;#039; eine [[Rückruffunktion]], die asynchron arbeitet, sobald ein Ereignis eintritt. Es bestimmt die Aktion, die auf das Ereignis folgt. Der [[Programmierer]] schreibt eine [[Funktion (Programmierung)|Funktion]] oder [[Methode (Programmierung)|Methode]], damit diese Aktion ausgeführt werden kann. Ein Ereignis kann ein einzelnes Element der [[Grafische Benutzeroberfläche|Benutzeroberfläche]] oder sogar ein [[HTML-Dokument]] sein. Ein Ereignis ist ein Element von Anwendungsinformationen aus einer zugrunde liegenden [[Programmbibliothek]].&amp;lt;ref&amp;gt;TechTarget: [https://www.techtarget.com/searchapparchitecture/definition/event-handler What is an event handler?]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ereignisorientierte Programmierung ==&lt;br /&gt;
Ein Ansatz, um diese Problemsituation effizienter zu lösen, ist die &amp;#039;&amp;#039;&amp;#039;ereignisorientierte Programmierung&amp;#039;&amp;#039;&amp;#039;, die auf einer &amp;#039;&amp;#039;[[Inversion of Control]]&amp;#039;&amp;#039; basiert. D.&amp;amp;nbsp;h., es wird nicht mehr im Haupt-Kontrollfluss auf das Eintreten des Ereignisses gewartet (der Hauptkontrollfluss hat die Kontrolle), sondern dem Ereignis wird ein eigener Kontrollfluss zugeordnet (häufig realisiert als [[Thread (Informatik)|Thread]]), der eigenständig beim Eintreten des Ereignisses aktiv wird und Einfluss auf den Hauptkontrollfluss nehmen kann (siehe [[parallele Programmierung]]).&lt;br /&gt;
&lt;br /&gt;
Technische Umsetzungen dieser Idee seit den 1960ern sind die [[Rückruffunktion]] (mit Event-spezifischem [[Unterprogramm]]) und (Hardware-)[[Interrupt]]s, welche die Nachteile des Pollings vermeiden, dafür jedoch zwangsläufig die potentiellen Probleme des parallelen Programmierens hervorrufen.&lt;br /&gt;
&lt;br /&gt;
Beschrieben werden können Ereignisbehandlungstechniken in [[Entwurfsmuster]]-Terminologie auch als [[Beobachter (Entwurfsmuster)|Beobachter]] (Observer).&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
Das Konzept der Ereignisorientierten Programmierung eignet sich auch gut zur [[Implementierung]] von [[Grafische Benutzeroberfläche|grafischen Benutzeroberflächen]], wobei hier die Ereignisse meist Aktionen des [[Benutzer]]s sind, wie zum Beispiel das Drücken einer Taste oder das Anklicken einer [[Schaltfläche]]. Ein anderes wichtiges Anwendungsfeld sind [[Computersimulation]]en, die so aufgebaut werden, dass Zustandsänderungen nur von Ereignissen ausgelöst werden, und ihrerseits Ereignisse auslösen (siehe [[ereignisorientierte Simulation]]).&lt;br /&gt;
&lt;br /&gt;
Ereignisorientierte Programmierung lässt sich gut mit den Konzepten der [[Objektorientierte Programmierung|objektorientierten Programmierung]] (OOP) kombinieren: [[Objekt (Programmierung)|Objekte]] definieren dann nicht mehr nur [[Eigenschaft]]en und [[Objektorientierte Programmierung|Methoden]], sondern sind auch &amp;#039;&amp;#039;Ereignisquellen&amp;#039;&amp;#039; und bieten die Möglichkeit, die Ereignisbehandlung zu beeinflussen. Auch die Ereignisbehandlungsroutinen ({{EnS|&amp;#039;&amp;#039;event handler&amp;#039;&amp;#039;}}, {{DeS|&amp;#039;&amp;#039;Ereignishandler&amp;#039;&amp;#039;}}) und die Ereignisse selbst werden dann als Objekte modelliert. Es kann jedoch argumentiert werden, dass über die Idee des entkoppelten Messagings zwischen Objektentitäten die ereignisorientierte Programmierung schon immer implizit ein Teilkonzept von OOP war.&amp;lt;ref&amp;gt;{{cite web|url=http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en |title=Dr. Alan Kay on the Meaning of Object-Oriented Programming |author=Stefan Ram |date=2003-07-23 |accessdate=2012-06-04 |language=englisch |publisher=fu-berlin.de|quote=&amp;#039;&amp;#039;OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.&amp;#039;&amp;#039;}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ereignisse können je nach Programmierumgebung entweder nur eine Ereignisbehandlungsroutine (wie z.&amp;amp;nbsp;B. in [[Object Pascal]]) oder beliebig viele Ereignisbehandlungsroutinen (wie z.&amp;amp;nbsp;B. in [[Visual Basic .NET|Visual Basic]], [[C-Sharp|C#]] oder wie beim [[Signal-Slot-Konzept]]) aufrufen.&lt;br /&gt;
&lt;br /&gt;
Es besteht die Möglichkeit, ein Ereignis als „verarbeitet“ zu kennzeichnen (consume). Nachfolgende Ereignisbehandler können dies abfragen und verzichten dann auf eine weitere Verarbeitung.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Beispiel zu Microsoft Access ===&lt;br /&gt;
Mit Microsoft Access können Benutzer kann u. a. &amp;#039;&amp;#039;Formulare&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Berichte&amp;#039;&amp;#039; mit jeweils darin enthaltenen Feldern entwerfen. Zusätzlich gibt es Bereiche wie Formularkopf, Berichtskopf, Gruppenkopf und Gruppenfuß (je Gruppenstufe) und Detailbereich, die selbst wiederum Einzelfelder enthalten. Alle diese Begriffe sind [[Objekt (Programmierung)|Objekte]].&lt;br /&gt;
&lt;br /&gt;
Die Verarbeitung für Objekte ist aufgeteilt in funktionale Teileinheiten, deren Ausführung vom Eintritt bestimmter Ereignisse abhängig ist:&lt;br /&gt;
[[Datei:Ereignis Access.png|mini|Definieren von Ereignissen in MS Access (2003)]]&lt;br /&gt;
&lt;br /&gt;
In &amp;#039;&amp;#039;Formularen&amp;#039;&amp;#039; treten die Ereignisse im Wesentlichen durch Aktionen der Benutzeroberfläche auf: Mausereignisse und Eingaben, die von der [[Microsoft Access|Access Engine]] erkannt und behandelt werden. Mögliche Ereignisse sind zum Beispiel&lt;br /&gt;
* bei Formularen: Öffnen, Anzeigen, vor Eingabe, Ändern, Löschen, Schließen&lt;br /&gt;
* bei Formular-Eingabefeldern: wenn geändert, beim Berühren mit Mauszeiger, beim Klicken, beim Doppelklicken, bei Taste UP&lt;br /&gt;
* bei Befehlsschaltflächen: beim Hingehen, beim Klicken, beim Doppelklicken&lt;br /&gt;
&lt;br /&gt;
Bei &amp;#039;&amp;#039;Berichten&amp;#039;&amp;#039; initiiert die Engine die Ereignisse datenabhängig, ähnlich den Steuerungsprinzipien der [[Normierte Programmierung|normierten Programmierung]]. Mögliche Ereignisse sind (zum Beispiel):&lt;br /&gt;
* für den ganzen Bericht: Beim Öffnen / Schließen, bei Seitenanfang, bei leeren Daten&lt;br /&gt;
* für Berichtsbereiche wie Gruppenkopf und -fuß: beim Drucken, beim Formatieren&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Zusätzlich zur Standardverarbeitung&amp;#039;&amp;#039; je Ereignistyp durch Microsoft Access kann der Programmierer für jedes Objekt und für jeden Ereignistyp festlegen, ob etwas Individuelles zu tun ist – und was. Zum &amp;#039;&amp;#039;Beispiel&amp;#039;&amp;#039; kann nach dem Ändern eines Eingabefelds eine bestimmte Prüfung vorgenommen werden. Beim Öffnen eines Berichts im Fall leerer Daten kann ein Fehlerhinweis angezeigt werden. Ein Gruppenfuß kann bei nur 1 Einzelzeile je Gruppe unsichtbar gemacht werden. Datenfelder können sichtbar oder unsichtbar gemacht oder mit bestimmten Inhalten ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
Für solche Zusatzfunktionen legt der Programmierer, gegebenenfalls von einem Software-Assistenten unterstützt, eine [[Prozedur (Programmierung)|Prozedur]] an, in der für das jeweilige Objekt und den jeweiligen Ereignistyp ein passender Code (in [[Visual Basic for Applications]]) hinterlegt wird (siehe Abbildung). Bei Eintreten des Ereignisses wird die entsprechende Prozedur ausgeführt. Ist keine Prozedur angelegt, wird das Ereignis in der definierten Grundform verarbeitet oder es erfolgt keine Verarbeitung (z. B. bei Berühren des Objekts mit dem [[Mauszeiger]]).&lt;br /&gt;
&lt;br /&gt;
== Implementierung eines Ereignissystems ==&lt;br /&gt;
&lt;br /&gt;
=== Pseudocode ===&lt;br /&gt;
Der folgende [[Pseudocode]] soll eine einfache Implementierung eines Ereignissystems zeigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Function Event&lt;br /&gt;
  listener = []&lt;br /&gt;
  call = function()&lt;br /&gt;
    for each parallel (l in listener)&lt;br /&gt;
      l()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anwendungsbeispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Klick = new Event&lt;br /&gt;
Klick.listener.add(regenGeräusch)&lt;br /&gt;
Klick.listener.add(regenBild)&lt;br /&gt;
Klick()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
Dieses einfache Ereignissystem bietet eine linear ablaufende Ereignisbehandlung und ermöglicht das An- und Abmelden von Ereignisbehandlungsroutinen. Für parallele Ausführung plant das [[World Wide Web Consortium]] sogenannte &amp;#039;&amp;#039;Web Workers&amp;#039;&amp;#039;. Das dargestellte Ereignissystem kann in der [[Programmiersprache]] [[JavaScript]] wie folgt verwendet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Formular = function()&lt;br /&gt;
{&lt;br /&gt;
    this.send = new Event();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function sendToServer()&lt;br /&gt;
{&lt;br /&gt;
    alert(&amp;quot;Die Anfrage wurde an den Server gesendet.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function sayThankYou()&lt;br /&gt;
{&lt;br /&gt;
    alert(&amp;quot;Vielen Dank für das Ausfüllen des Formulars.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var umfrage = new Formular();&lt;br /&gt;
umfrage.send.addListener(this, &amp;quot;sendToServer&amp;quot;);&lt;br /&gt;
umfrage.send.addListener(this, &amp;quot;sayThankYou&amp;quot;);&lt;br /&gt;
umfrage.send();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== C++ ===&lt;br /&gt;
Das folgende Codebeispiel in Microsofts Variante der [[Programmiersprache]] [[C++]] zeigt die Verwendung von Ereignisbehandlungsmethoden ({{enS|event handlers}}) und die Verknüpfung mit einem dazu passenden Ereignis. Für das Verknüpfen und Trennen der Ereignisse werden spezifische [[Funktion (Programmierung)|Funktionen]] in C++ verwendet. Ereignisattribute &amp;lt;code&amp;gt;[event_source(native)]&amp;lt;/code&amp;gt; und  &amp;lt;code&amp;gt;[event_receiver(native)]&amp;lt;/code&amp;gt; in nativem C++ sind nicht mit Standard-C++ kompatibel. Um sie mit [[Visual C++|MSVC]] kompilieren zu können, muss der &amp;#039;&amp;#039;/permissive-&amp;#039;&amp;#039; Konformitätsmodus ausgeschaltet sein.&amp;lt;ref&amp;gt;Microsoft: [https://learn.microsoft.com/en-us/cpp/cpp/event-handling-in-native-cpp?view=msvc-170 Event handling in native C++]&amp;lt;/ref&amp;gt; Mit anderen C++-Compilern funktioniert dieses Beispiel nicht.&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
// Ereignisquellenklasse&lt;br /&gt;
[event_source(native)]&lt;br /&gt;
class EventSource&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    // Methodendeklaration, die die Ereignisbehandlungsmethoden (event handlers) als Ereignis deklariert&lt;br /&gt;
    __event void MyEvent(int count, int wordCount);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Ereignisempfängerklasse&lt;br /&gt;
[event_receiver(native)]&lt;br /&gt;
class EventReceiver&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    // Ereignisbehandlungsmethode (event handler)&lt;br /&gt;
    // Sie hat dieselbe Methodensignatur wie das Ereignis MyEvent&lt;br /&gt;
    void MyEventHandler1(int count, int wordCount)&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;MyEventHandler1 asserts that Wikipedia is an important encyclopedia with &amp;quot; &amp;lt;&amp;lt; count &amp;lt;&amp;lt; &amp;quot; articles and &amp;quot; &amp;lt;&amp;lt; wordCount &amp;lt;&amp;lt; &amp;quot; words.&amp;quot; &amp;lt;&amp;lt; endl; // Ausgabe auf der Konsole&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Ereignisbehandlungsmethode (event handler)&lt;br /&gt;
    // Sie hat dieselbe Methodensignatur wie das Ereignis MyEvent&lt;br /&gt;
    void MyEventHandler2(int count, int wordCount)&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;MyEventHandler2 asserts that Uncyclopedia is a funny encyclopedia with &amp;quot; &amp;lt;&amp;lt; count &amp;lt;&amp;lt; &amp;quot; articles and &amp;quot; &amp;lt;&amp;lt; wordCount &amp;lt;&amp;lt; &amp;quot; words.&amp;quot; &amp;lt;&amp;lt; endl; // Ausgabe auf der Konsole&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Diese Methode verknüpft das Ereignis (Zeiger pEventSource) mit den Ereignisbehandlungsmethoden MyEventHandler1 und MyEventHandler2&lt;br /&gt;
    void hookEvent(EventSource* pEventSource)&lt;br /&gt;
    {&lt;br /&gt;
        // Aufrufe der intrinsischen C++ Funktion __hook&lt;br /&gt;
        __hook(&amp;amp;EventSource::MyEvent, pEventSource, &amp;amp;EventReceiver::MyEventHandler1);&lt;br /&gt;
        __hook(&amp;amp;EventSource::MyEvent, pEventSource, &amp;amp;EventReceiver::MyEventHandler2);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Diese Methode trennt das Ereignis (Zeiger pSource) von den Ereignisbehandlungsmethoden MyEventHandler1 und MyEventHandler2&lt;br /&gt;
    void unhookEvent(EventSource* pEventSource)&lt;br /&gt;
    {&lt;br /&gt;
        // Aufrufe der intrinsischen C++ Funktion __unhook&lt;br /&gt;
        __unhook(&amp;amp;EventSource::MyEvent, pEventSource, &amp;amp;EventReceiver::MyEventHandler1);&lt;br /&gt;
        __unhook(&amp;amp;EventSource::MyEvent, pEventSource, &amp;amp;EventReceiver::MyEventHandler2);&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Hauptfunktion die das Programm ausführt&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    // Variablendeklaration für Ereignisquelle und Ereignisempfänger&lt;br /&gt;
    EventSource eventSource;&lt;br /&gt;
    EventReceiver eventReceiver;&lt;br /&gt;
&lt;br /&gt;
    eventReceiver.hookEvent(&amp;amp;eventSource); // Aufruf der Methode hookEvent in der Klasse EventReceiver&lt;br /&gt;
     // Löst das Ereignis MyEvent aus. Dadurch werden die Ereignisbehandlungsmethoden MyEventHandler1 und MyEventHandler2 jeweils aufgerufen.&lt;br /&gt;
    __raise eventSource.MyEvent(1000000, 100000000);&lt;br /&gt;
    __raise eventSource.MyEvent(100000, 10000000);&lt;br /&gt;
    eventReceiver.unhookEvent(&amp;amp;eventSource); // Aufruf der Methode unhookEvent in der Klasse EventReceiver&lt;br /&gt;
     // Löst das Ereignis MyEvent aus. Die Ereignisbehandlungsmethoden werden nicht aufgerufen, weil das Ereignis in der Methode unhookEvent getrennt wurde.&lt;br /&gt;
    __raise eventSource.MyEvent(10000, 1000000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Beim Ausführen der [[Funktion (Programmierung)|Funktion]] &amp;#039;&amp;#039;main&amp;#039;&amp;#039; wird folgender Text auf der Konsole ausgegeben:&amp;lt;pre&amp;gt;&lt;br /&gt;
MyEventHandler2 asserts that Uncyclopedia is a funny encyclopedia with 1000000 articles and 100000000 words.&lt;br /&gt;
MyEventHandler1 asserts that Wikipedia is an important encyclopedia with 1000000 articles and 100000000 words.&lt;br /&gt;
MyEventHandler2 asserts that Uncyclopedia is a funny encyclopedia with 100000 articles and 10000000 words.&lt;br /&gt;
MyEventHandler1 asserts that Wikipedia is an important encyclopedia with 100000 articles and 10000000 words.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Complex Event Processing]]&lt;br /&gt;
* [[Smart UI]]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierkonzept]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Thomas Dresler</name></author>
	</entry>
</feed>