![]() |
Download als Thread
Hi,
ich habe hier im Forum mal gesucht und auch was gefunden aber so richtig verstehen tu ich die Codes da nicht. Ich möchte noch anmerken, dass ich vorher noch nie mit Threads gearbeitet hab. Also ich möchte eine Datei mit IdHttp in einem Thread downloaden sodass meine Hauptanwendung nicht abstürzt währenddessen. Ich habe mir Luckies Tutorial mal durchgeblättert doch das Ganze ist ein bisschen viel zu lesen (40 Seiten). Natürlich werde ich mir das nochmal richtig duchlesen aber ich hoffe trotzdem erstmal auf eure Hilfe. Also hier mein bisheriger Code im Thread:
Delphi-Quellcode:
Geht das Ganze so einigermaßen?
unit Downloaden;
interface uses Classes, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP; type Download = class(TThread) private procedure Downloaden; protected procedure Execute; override; end; implementation uses Unit1, Unit12; { Download } procedure IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer); begin form12.progressbar1.Position := AWorkCount; end; procedure IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer); begin form12.progressbar1.Max := aworkcountmax; end; procedure IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode); begin form12.progressbar1.Position := 0; form12.progressbar1.Visible := false; end; procedure Download.Execute; begin Synchronize(Downloaden); end; procedure Download.Downloaden; var http1: TIdhttp; lstream: Tfilestream; begin http1 := TIdhttp.create(); http1.free; lStream:=TFileStream.Create(form1.Edit1.Text + '\' + form1.Edit2.Text + '.mp4' , fmCreate); try Http1.Get(Form12.memo4.text,lStream); finally lStream.Free; end; end; end. Mein eigentliches Problem ist jetzt aber das ich nicht weiß wie ich den Thread per Button starte? Wenn ich sowas schreibe:
Delphi-Quellcode:
Erhalte ich folgende Fehlermeldung:
var
Fredie: TDownload; begin Fredie:=TDownload.Create(True); Fredie.OnTerminate:=ThreadTerminate; Fredie.Resume; end; [DCC Fehler] Unit12.pas(190): E2003 Undefinierter Bezeichner: 'TDownload' Wenn ich bei den Uses den Unit Namen "Downloaden" eingebe kommt der gleiche Fehler. Ich hoffe Ihr könnt mir helfen. MFG Lars Wiltfang |
Re: Download als Thread
Deine Klasse heißt ja auch Download und nicht TDownload. Weißt du überhaupt, was du da programmiert hast? :gruebel:
Delphi-Quellcode:
Mit freundlichen Grüßen,
Download = class(TThread)
Valle |
Re: Download als Thread
Deine Klasse heißt ja auch Download, und nicht TDownload. Die IdHTTP solltest du abgesehen davon natürlich innerhalb deiner thread-Klasse (private) deklarieren.
|
Re: Download als Thread
Delphi-Quellcode:
Ob da was gehen kann wenn du deine Instanzen gleich wieder freigibst :gruebel:
http1 := TIdhttp.create();
http1.free; |
Re: Download als Thread
Und wenn ich mich nicht täusche bringt dein Thread eh nix, weil du ja durch Synchronize eh wieder alles quasi in den Hauptthread verlagerst...
|
Re: Download als Thread
Mal angenommen er würde dieses Synchronize nicht verwenden und idHttp würde tatsächlich in einem Thread laufen; würden die zugewiesenen Events (IdHTTP1Work) dann nicht auch im Thread ausgeführt werden? Und würde das nicht bedeuten, dass er einen weiteren Fehler macht, da er ja dort auf die VCL zugreift? Da enden meine Delphi-Kenntnisse als Linuxer und "Pythoner" nämlich. :angel2:
Mit freundlichen Grüßen, Valle |
Re: Download als Thread
Zitat:
|
Re: Download als Thread
wenn er den Zugriff von IdHTTP1Work mit Synchronize in den Hauptthread verlegt, würde dieses dann wieder gehn.
|
Re: Download als Thread
Was mir derzeit auffällt ist das fast alle schreiben das er alles falsch macht und wie man es nicht macht. Aber eigentlich war ja die Frage wie man es macht. Wie es nicht geht weiß er sicher selbst :wink:
|
Re: Download als Thread
Er sollte doch erst das Tutorial von Luckie lesen und dann sich daran wagen. ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 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