Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Download als Thread (https://www.delphipraxis.net/129286-download-als-thread.html)

Larsi 16. Feb 2009 13:31


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:
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.
Geht das Ganze so einigermaßen?

Mein eigentliches Problem ist jetzt aber das ich nicht weiß wie ich den Thread per Button starte?

Wenn ich sowas schreibe:
Delphi-Quellcode:
var
  Fredie: TDownload;
begin
Fredie:=TDownload.Create(True);
 Fredie.OnTerminate:=ThreadTerminate;
  Fredie.Resume;

end;
Erhalte ich folgende Fehlermeldung:

[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

Valle 16. Feb 2009 13:33

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:
Download = class(TThread)
Mit freundlichen Grüßen,

Valle

Meflin 16. Feb 2009 13:33

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.

Bernhard Geyer 16. Feb 2009 13:35

Re: Download als Thread
 
Delphi-Quellcode:
  http1 := TIdhttp.create();

  http1.free;
Ob da was gehen kann wenn du deine Instanzen gleich wieder freigibst :gruebel:

Neutral General 16. Feb 2009 13:43

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...

Valle 16. Feb 2009 13:46

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

Meflin 16. Feb 2009 13:52

Re: Download als Thread
 
Zitat:

Zitat von Valle
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?

Völlig richtig. Im Grund macht er alles falsch, was man falsch machen kann :mrgreen:

himitsu 16. Feb 2009 13:53

Re: Download als Thread
 
wenn er den Zugriff von IdHTTP1Work mit Synchronize in den Hauptthread verlegt, würde dieses dann wieder gehn.

SirThornberry 16. Feb 2009 15:17

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:

Die Muhkuh 16. Feb 2009 15:59

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.
Seite 1 von 2  1 2      

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