Forum: Algorithmen, Datenstrukturen und Klassendesign
by TiGü,
30. Jul 2015
Das mit der Reihenfolge ist egal, aber die IDs von SubscribeToMessage zu speichern ist doch nur optional?!
Unsubscribe hat doch noch zwei weitere Überladungen (http://docwiki.embarcadero.com/Libraries/XE8/de/System.Messaging.TMessageManager.Unsubscribe).
Bei einer relativ geringen Menge an Subscriberspro MessageClassist die Iteration über die Liste doch stark vernachlässigbar oder täusche ich...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by TiGü,
29. Jul 2015
Ja, das Beispiel ist natürlich sinnbefreit, weil hier Daten aus dem Main-Thread in den anderen Thread und wieder zurückgeschaufelt werden.
Aber mir gings ja um die grundsätzliche Heransgehensweise.
Über den TMessageManger können ja ganz andere Daten an einen Thread übergeben werden, der zum Beispiel nach N-Werten anfängt darauf eine lange Operation auszuführen und das Ergebnis wieder zurück an...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by TiGü,
29. Jul 2015
Verflucht, wie einfach hinterher immer so eine Lösung aussieht! Danke Mav! :thumb:
So ist das jetzt eine runde Sache.
procedure TMessageThread.SendDateTime(const ADateTime : TDateTime);
var
LDateTime : TDateTime;
begin
LDateTime := ADateTime;
TThread.Queue(nil,
procedure
Forum: Algorithmen, Datenstrukturen und Klassendesign
by TiGü,
29. Jul 2015
Hm, stimmt...das die Werte noch an der Stelle im Speicher liegen, kann keiner garantieren.
Wie macht man es richtig?
Einen Zwischenspeicher nehmen, also einen weiteren Stack/Liste als Membervariable in der eigenen TThread-Ableitung, und dort dann reinkopieren?
Forum: Algorithmen, Datenstrukturen und Klassendesign
by TiGü,
29. Jul 2015
Ich bin jetzt dazu übergegangen, mir ein Array zu übergeben.
Der Aufruf der anonymen Methode von TThread.Queue wird wahrscheinlich immer den letzten Wert für die lokale TDateTime-Variable genommen haben.
Daher die gleichen Werte in der Message.
Die gleichen Instanz-Pointer der Messages sind eher Zufall und liegen einfach nur auf der gleichen Speicheradresse.
Also war mein Problem...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by TiGü,
29. Jul 2015
Ich ging/gehe davon aus, dass während der Verarbeitung (im Execute) von außen neue Daten reingeschaufelt werden können (durch GetIdleMessage).
Ist mein Ansatz falsch?
In beiden Methoden wird der Datencontainer angefasst, Items hingefügt oder entfernt.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by TiGü,
29. Jul 2015
Du meinst, dass mich der Blitz beim Scheißen treffen soll, weil ich Queue und Stack verwechselt habe? :shock:
Klar, ich will ja nach dem zuletzt hingefügten Element gucken und nicht was als allererstes hinzugefügt wurde.
Aber selbst wenn ich mein Programm (dieses Mal im Anhang) entsprechend umändere, wird DoSendMessage immer mit den gleichen TDateTime-Wert aufgerufen, obwohl laut Debugger die...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by TiGü,
29. Jul 2015
"Guckt" nach dem obersten Element im Stapel, ohne es zu entfernen, im Gegensatz zu Dequeue.
So an und für sich ein Double, daher ist die Prüfung auf Ungleichheit doch okay, oder?
So war das gedacht...habe ich hier schon einen Denkfehler?
Manchmal sehe ich den Wald vor lauter Bäumen nicht.