Zitat von
DelphiManiac:
@Der_Unwissende:
Hast du evtl ein Beispielcode für die Callback Methode und das mit dem "Observer-Pattern" .
Ich google mal, wäre aber trotzdem super wenn du mir da noch einen Schupps geben könntest.
Erstmal zu den Callbacks (sorry, wird mal etwas unsauber, bin auf'm Sprung):
Delphi-Quellcode:
type
TDeinCallBack = procedure(const neuerWert : TTyp) of Object;
So legst du einen Methodenszeiger an. Dieser speicher die Adresse einer Funktion/Prozedur einer Klasse. Du legst jetzt eine Variable von diesem Typ in deinem Thread an. Die Parameter (hier neuerWert) geben dabei die Nachricht weiter (was genau ist passiert). Hier könntest du z.B. einen Messwert übergeben, der angezeigt oder gespeichert werden soll.
In deiner Form legst du dann eine Methode mit dieser Signatur an
Delphi-Quellcode:
type
TForm1 = class(TForm)
...
procedure onWhatEver(const neuerWert : TTyp);
Diese Prozedur kannst du nun der Variable des Threads vom Typ TDeinCallback zuweisen (:= Form1.onWhatEver
Also ohne Klammern und Argument. Wie gesagt, du speichert damit eine Adresse, assigned gibt dir also zurück, ob dieser Zeiger gültig ist oder nicht. Ist er gültig, kann dein Thread diese Methode einfach aufrufen. Dazu einfach diese Variable wie eine echte Methode verwenden. Damit muss dein Thread also gar nicht wissen wo die Funktion herkommt. Er hat einfach eine Adresse und ruft die entsprechende Methode auf. Die kannst dann auch aus Form2, Fomr3 oder DoFoo28737 kommen, hauptsache es ist eine Methode, die genau diese Signatur hat.
Das Observerpattern ist hingegen nur ein Muster. Hier wird vorgegeben, wie man mehr als einen Beobachter über ein Ereignis informieren kann, die Implementierung hingegen bleibt einem selbst überlassen. Das was ich noch ansprach (über Objekte) werde ich hier auch nochmal posten, aber jetzt muss ich erstmal weiter.