![]() |
TThread.WaitFor verursacht einfrieren des Programmes
Moin,
ich nutze die Unit UDownThread aus ![]() Ich möchte dies in einem thread tun, da mir das Programm ansonsten hin und wieder trotz Application.ProzessMessages und TidAntiFreeze für kurze Zeit einfriert, bzw. die Oberfläche nicht neu gezeichnet wird, nachdem sie durch andere Fenster (bsp. Explorer) verdeckt wurde. Nun möchte ich mehrere Dateien nacheinander nicht parallel! herunterladen, und dachte mir, ich könnte mit WaitFor einfach warten, bis der vorherige Download abgeschlossen ist, aber nun friert mir das Programm bei WaitFor immer komplett ein. Die Datei (welche nur ein paar Kilobyte groß ist) wird nicht heruntergeladen und das Programm erwacht auch nicht mehr.
Delphi-Quellcode:
Hab ich einen Denkfehler in meinem Code, oder muss ich um WaitFor benutzen zu können, etwas an der DownThread-Klasse ändern ?
procedure TForm1.MyDownloadTest(DownFiles, FileNames: TStrings);
var i: integer; Down: TDownThread; begin for i := 0 to DownFiles.Count-1 do begin Down := TDownThread.Create(true); with Down do begin FreeOnTerminate := true; OnWork := OnThreadWork; OnWorkBegin := OnThreadWorkBegin; URL := DownFiles[i]; FileName := FileNames[i]; WaitFor; end; end; end; Grüße Christian |
Re: TThread.WaitFor verursacht einfrieren des Programmes
Warum machst du überhaupt waitfor? Dann kanst du doch den Thread auch gleich im Mainthread lassen. :gruebel:
|
Re: TThread.WaitFor verursacht einfrieren des Programmes
Habe ich doch geschrieben, wenn ich es im Mainthread laufen lasse, friert mir kurzzeitig immer wieder das Programm ein und die Oberfläche wird nicht neugezeichnet, nach dem sie überdeckt wurde.
|
Re: TThread.WaitFor verursacht einfrieren des Programmes
Naja, mit WaitFor wird ja gewartet bis der Thread fertig ist und somit werden keine Messages verarbeitet. Und warum nichts runterlädt sieht man wohl erst wenn man deinen Thread-Quelltext sieht.
|
Re: TThread.WaitFor verursacht einfrieren des Programmes
Der Thread Quelltext ist oben verlinkt, ohne Schleife und Waitfor funktioniert es wunderbar.
@SirThornberry Heist das, ich müsste die Schleife in den Thread verlagern ? |
Re: TThread.WaitFor verursacht einfrieren des Programmes
Mach mal aus waifor --> resume!
|
Re: TThread.WaitFor verursacht einfrieren des Programmes
:wall: Ich hab resume vergessen, habs nun folgender Maßen geändert:
Delphi-Quellcode:
Nun läd er die erste Datei herunter, doch danach bricht das Programm mit der Fehlermeldung "Das Handle ist ungültig (6)." ab.
procedure TForm1.MyDownloadTest(DownFiles, FileNames: TStrings);
var i: integer; Down: TDownThread; begin for i := 0 to DownFiles.Count-1 do begin Down := TDownThread.Create(true); with Down do begin FreeOnTerminate := true; OnWork := OnThreadWork; OnWorkBegin := OnThreadWorkBegin; URL := DownFiles[i]; FileName := FileNames[i]; resume; WaitFor; end; end; end; |
Re: TThread.WaitFor verursacht einfrieren des Programmes
Könnte das eventuell daran liegen?
Delphi-Quellcode:
FreeOnTerminate := true;
Zitat:
Klaus |
Re: TThread.WaitFor verursacht einfrieren des Programmes
Tatsache,
Delphi-Quellcode:
Funktioniert. Vielen Dank euch allen :thumb:
procedure TForm1.MyDownloadTest(DownFiles, FileNames: TStrings);
var i: integer; Down: TDownThread; begin for i := 0 to DownFiles.Count-1 do begin Down := TDownThread.Create(true); with Down do begin FreeOnTerminate := false; OnWork := OnThreadWork; OnWorkBegin := OnThreadWorkBegin; URL := DownFiles[i]; FileName := FileNames[i]; resume; WaitFor; Free; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 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