![]() |
Thread beenden oder warten lassen?
Mein Programm läd via Indy HTTP.Post Dateien ins Inet und damit es wärend dem Upload nicht tot ist hab ich das Hochladen der Dateien in einen Thread gepackt. Das funktioniert auch. Mein Programm soll alle paar Sekunden eine Datei hochladen. Meine Frage ist jetzt:
Wie mache ich das speichermäßig richtig? Soll ich einfach bei jeder hochzuladenden Datei wieder mit Create einen Thread aufmachen der sich dann nach execute (also hochladen) selbst beendet? Muss ich in dem Fall den Speicher danach irgendwie freigeben oder passiert das automatisch? Oder macht man nur einmal am Anfang des Programmablaufs den Thread auf und lässt ihn dann irgendwie warten bis wieder eine neue Datei hochgeladen werden soll? Wie kann man in dem Fall einen Thread so lange warten lassen ohne Rechenzeit zu verbrauchen? Gruß, Moritz |
Re: Thread beenden oder warten lassen?
Also du kannst beides machen (ich geh jetzt mal davon aus, dass du von TThread ableitest). Ob es da speichermäßig einen Unterschied gibt, weiß ich nicht genau. Da ja immer nur ein Thread läuft, wird sich das sicherlich nicht viel nehmen.
Zitat:
![]() Zitat:
![]() ![]() |
Re: Thread beenden oder warten lassen?
Danke. Jep ich leite von TThread ab.
Wenn ich bei einem Thread bleiben will müsste ich dann also innerhalb der Execute Routine den eigenen Thread in den Ruhezustand schicken und von außerhalb wenns wieder was zu tun gibt wieder aufwecken. Weil Execute lässt sich ja nicht noch einmal aufrufen. Wenn aber ein Thread nach Ende von execute zu nichts mehr zu gebrauchen ist frage ich mich warum dann Freeonterminate ausschaltbar ist. Das Gegenteil macht doch dann keinen Sinn oder? Oder bleibt er dann beim selben Speicherraum wenn man erneut create aufruft? Würde gerne noch wissen was Speichermäßig ideal ist. |
Re: Thread beenden oder warten lassen?
Zitat:
Zitat:
Zitat:
|
Re: Thread beenden oder warten lassen?
Moin Robert,
Zitat:
Wenn man das Threadobjekt selber freigeben will, vor allem mit FreeAndNil, wäre eine FreeOnTerminate unpraktisch ;-) |
Re: Thread beenden oder warten lassen?
christian, soll ich jetzt den thread schlafen schicken oder jedes mal nen neuen createn?
|
Re: Thread beenden oder warten lassen?
Moin Moritz,
ich hätte da noch eine dritte Variante anzubieten. Du schreibst in Deinem Hauptprogramm die Pfade in eine Liste (z.B. TStringList), die der Thread abfragt, und nach der Verarbeitung aus der Liste löscht. Der Zugriff sollte dann aber per Synchronize erfolgen. Nach der Verarbeitung legt sich der Thread dann selber für eine gewisse Zeit schlafen, z.B. mit Sleep, und prüft anschliessend, ob noch eine Datei vorhanden ist. Beenden kann man den Thread dann, indem man ihm ein Eigenschaft "spendiert", über die dem Thread mitgeteilt wird, dass er sich beenden soll. Ob der Thread nun je Durchlauf immer eine Datei verarbeitet, oder sich erst schlafenlegt, wenn keine Datei mehr in der Liste vorhanden ist, hängt dann von Deinem Anwendungsfall ab. |
Re: Thread beenden oder warten lassen?
Zitat:
Zitat:
naridian: Ich persönlich würde die Methode des immer wieder Neuerzeugens bevorzugen, da das doch am leichtesten machbar ist. Halt immer die Datei mit angeben, Thread ausführen (vorher FreeOnTerminate setzen), und die Execute-Methode einmal durchlaufen lassen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz