05.11.2013 Aufrufe

Entwicklung einer Automatenbedienung mit einer leistungsfähigen ...

Entwicklung einer Automatenbedienung mit einer leistungsfähigen ...

Entwicklung einer Automatenbedienung mit einer leistungsfähigen ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Noch eine Klasse aus der Base- Bibliothek, deren Funktionen bei dieser Arbeit noch<br />

erwähnt werden, ist „CallbackInterface“. Mit dieser Klasse kann eine Kommunikation<br />

in der Form von Ereignissen, oder Events, zwischen beliebigen Klassen im asrLib-<br />

Projekt realisiert werden. Die drei wichtigsten Funktionen, die dabei verwendet werden,<br />

sind „registerCallback()“, „executeCallback()“ und „removeCallbak()“ aus<br />

„include/Base/Callbak.h“. Wie der Name der ersten Funktion schon vermuten lässt,<br />

kann man diese <strong>mit</strong> der Registrierung eines Postfaches vergleichen. Mit der zweiten<br />

Funktion wird das Senden <strong>einer</strong> Nachricht durchgeführt. Im Weiteren wird so eine<br />

Nachricht einfach als Callback bezeichnet, weil diese in Wirklichkeit ein Objekt der<br />

Klasse „Callback“ ist. Um den belegten Speicher wieder freizugeben, kann man das<br />

registrierte Callback <strong>mit</strong> der dritten Funktion löschen. Die Klasse „CallbackInterface“<br />

wurde als Basisklasse für die Klasse „Base“ genommen, deshalb kann man Callbacks<br />

direkt bei Objekten der von „Base“ abgeleiteten Klassen registrieren. In diesem Fall<br />

sind die registrierten „Postfächer“ nur für diese Objekte zu sehen. Man kann die<br />

Callbacks auch so registrieren, dass die aus allen Klassen gesendet werden können.<br />

Dafür ist die Klasse „CallbackBuffer“ <strong>mit</strong> ihrem globalen Singleton- Objekt gedacht.<br />

1. Callback* cb =<br />

new Callback(_adaption, &AdaptionHGH::adaptionCallback);<br />

2. _recognizer->registerCallback("adaptionCallback", cb);<br />

3. _recognizer->executeCallback("adaptionCallback", (void*)(data));<br />

4. _recognizer->removeCallback("adaptionCallback", _adaption);<br />

In diesem Beispiel- Quellcode wird, als Erstes, ein Callback erstellt. Sein Konstruktor<br />

soll zwei Parameter erhalten: ein Objekt, an den das Callback später gesendet werden<br />

soll, und eine Referenz auf die Funktion von diesem Objekt, die dabei aufgerufen<br />

werden soll. Als Zweites wird dieses Callback <strong>mit</strong> einem speziellen Namen registriert.<br />

Man kann Callback bei einem Objekt registrieren, dann wird es an dieses Objekt<br />

gebunden, wie in diesem Beispiel. Da<strong>mit</strong> Callback nicht objektbezogen ist, soll man<br />

„CallbackBuffer->getInstance()“ statt „_recognizer“ verwenden. Das gilt auch für die<br />

letzten zwei Zeilen. Als Drittes wird Callback gesendet. Die zu sendenden Daten<br />

werden (standardmäßig implizit) zum Typ „Zeiger auf void“ konvertiert. Man kann<br />

mehrere Callbacks <strong>mit</strong> gleichen Namen registrieren, die an unterschiedliche Objekte<br />

gesendet werden. So kann man <strong>mit</strong> <strong>einer</strong> einzigen Nachricht mehrere Funktionen<br />

aufrufen. Deshalb soll man beim Löschen vom Callback auch den Empfänger eingeben.<br />

Seite 29

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!