Hallo Zusammen,
herzlichen Dank für die rege Teilnahme. Natürlich ist das nur ein Beispiel und das Problem zu verdeutlichen. Der Anwender bekommt Filterkriterien, doch auch die können wenn Sie unsinnig sind Unsinn liefern der lange dauert.
Ich habe ein paar Dokumente gelesen über Threads, und auch es ein OnTerminate gibt womit ich informiert werden dass es weiter gehen kann. Doch das alles ist um ein so viel höherer Aufwand und undurchsichtig das ich mir die Frage stelle, kann das wirklich sein oder übersehe ich da etwas wesentliches. Ich kann nicht abschätzen bei einer Mobilen Anwendung wie lange etwas dauern wird da dazwischen ja noch die unstabile Internetverbindung eine gewaltige Rolle spielt. Also muss ich jede Kleinigkeit die vom Server über das Internet abgerufen wird, in ein Thread packen.
Ist der folgende Denkansatz richtig:
Alle Methoden sind erst einmal ohne Thread damit Sie mehrfach verwendet werden können. Bleiben wir mal beim Download der Kunden und das anschließende bearbeiten der Daten.
Delphi-Quellcode:
TThread.CreateAnonymousThread(
procedure ()
begin
//Alles was nicht die VCL benötigt
//wird hier abgearbeitet.
//Hier könnte der KundenDownload stehen.
TThread.Synchronize (TThread.CurrentThread,
procedure ()
var ADataSetList: TFDJSONDataSets;
begin
//Sobald die VCL benötigt wird, muss der Thread syncronisiert werden
//Wenn der Vorgang länger dauern würde, was würde Android hier machen?
//Wieder die App beenden oder das Device reseten oder gilt das nur für den Main Thread?
ADataSetList := KundenDownload(FilterKriterien);
if (Assigned(ADataSetList)
and
(TFDJSONDataSetsReader.GetListCount(ADataSetList)>0))
then KundendatenVerarbeiten(ADataSetList);
end);
end).Start;
Hier wird der Download und das Verarbeiten in einem Thread zusammengefasst und kann dabei da es Synchronisiert ist auch auf die
VCL zugreifen. Darf jetzt dieser Thread beliebig lange laufen oder gilt das nur für den Bereich im AnonymousThread?
Gruß Kostas