Ich danke euch sehr für das Feedback!
Wirklich toll, wie hier Probleme aufgezeigt werden.
Die StringList lebt so lange, bis sie durch erneuten Aufruf des FileExplorer (versehentlich habe ich einmal den Namen "FileWalker" hier eingeschleust)
neu created wird.
Die Gefahren des Multithreadings sind mir bewusst, da Freepascal leider keine anonymen Methoden unterstützt, ist mir die Nutzung von Synchronize eigentlich etwas zu aufwendig.
Als (zugegeben dürftige) Alternative nutze ich die Windows Messages.
Daher beim Erstellen des FileExplorer Threads auch die Übergabe der receiverformhandle: HWND
Der Thread ruft dann nach Befüllen der StringList den Befehl auf:
SendMessage(Freceiverformhandle, 1125, 1, 0);
Delphi-Quellcode:
procedure TForm1.WndProc(var Msg: TMessage);
begin
inherited;
if Msg.Msg = 1125 then
case msg.WParam of
1: myInst.fillLvWithSl(); //Der FileExplorer Thread ist fertig, jetzt die Listview füllen.
end;
end;
Jetzt ist mir leider noch nicht klar, warum die Nutzung eines Pointers für die StringList schlecht ist?
Klar kann ich auch eine Kopie der StringList übergeben, aber bedeutet das nicht mehr Rechenaufwand?
Es gibt nur diese eine Instanz der StringList die wie erwähnt ausschließlich durch den Thread erstellt und befüllt wird.
Danke für den Hinweis, dass Thread.Start nicht notwendig ist. Freue mich was zu lernen.
Liebe Grüße, Julian