Ich bin mir nicht sicher, ob das so geht, und bevor ich anfange das lang zu coden, frag ich lieber mal.
Also. Ich habe eine Klasse, die im wesentlichen eine große TObjectlist enthält. Ich möchte nun diverse Objekte aus dieser Liste suchen. Das kann relativ lange dauern, daher möchte ich die Suche in einen Thread auslagern. D.h. die Klassenmethode .Suche wird in einem separaten Thread ausgeführt. Jetzt soll im Fenster sofort angezeigt werden, wenn das erste passende Objekt gefunden wurde. Würde über Synchronize gehen, aber das dauert erfahrungsgemäß zu lange, wenn viele Objekte gefunden werden. Außerdem möchte ich in der Klasse selbst die VCL rauslassen, d.h. TThread möchte ich nicht verwenden.
Meine Idee ist, das über Messages zu realisieren. D.h
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var aObject: TMyObject; aObject := MeinTollesGefundenesObject; SendMessage(MainWindow, WM_OBJECTGEFUNDEN, wParam(aObject), 0);
var newObject: TMyObject; case Message.msg of WM_OBJECTGEFUNDEN: begin newObject := TMyObject(wParam); DoSomething(newObject); end; |
Frage: Geht das? Kann der Sender einfach das Object in den Parameter packen, und kann der Empfänger das zurückcasten? Einfach ausprobieren is irgendwie nicht - gerade wenn Threads im Spiel sind, kann das ja zufällig gutgehen, bis es irgendwann kracht

. Das ganze soll nur Anwendungsintern passieren.
We are, we were and will not be.