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 den Main-Thread zu übergeben.
Das würde ich auf jeden Fall anders machen...
Delphi-Quellcode:
procedure TMyThread.Execute;
begin
while not(Terminated) do
begin
try
E_Event.WaitFor(INFINITE);
if Terminated then
exit;
MyExecute; // Hier findet die Eigentliche Verarbeitung statt.
except
end;
end;
end;
...
FSaveID := TMessageManager.DefaultManager.SubscribeToMessage(TWhatever,
Procedure(Const Sender:TObject;Const M:TFMXMessage)
begin
FVerarbeite := TWhatEver(M).Value.Daten;
E_Event.SetEvent;
end);
...
Tests ob der Thread noch läuft usw.. habe ich mir jetzt gespart...