Entwickler-Ecke

Internet / Netzwerk - Multidownload (Threads)


Novo - So 07.10.07 14:16
Titel: Multidownload (Threads)
Ich habe ein Projekt hier:
http://www.delphi-forum.de/viewtopic.php?p=465623
Sourcecode zum Nachvollziehen gibts im Link oben!
Dazu habe ich ein paar fragen:

Wie kann ich:

- mit der Indy 10 komponente
2 Links gleichzeitig downloaden?
Dazu müsste ich es in Threads auslagern und die weinzeln aufrufen.
ich weiss aber nicht wie, und SuFu hab ich benutzt, aber das war mir zu kompliziert erklärt dort



greez novo


Narses - Mo 08.10.07 00:47

Moin!

user profile iconNovo hat folgendes geschrieben:
Dazu müsste ich es in Threads auslagern und die weinzeln aufrufen.

Wir haben in der Lib ein Tutorial zum Thema Threads [http://www.delphi-library.de/topic_16627.html] und hier [http://www.delphi-library.de/topic_74581.html] ist noch ein anderes Beispiel dazu. :les: ;)

user profile iconNovo hat folgendes geschrieben:
ich weiss aber nicht wie, und SuFu hab ich benutzt, aber das war mir zu kompliziert erklärt dort

Wenn du damit nicht weiter kommst, solltest du in Erwägung ziehen, dass das Thema Threads noch etwas mehr Einsatz von dir verlangt. :nixweiss:

cu
Narses


JayEff - Mo 08.10.07 00:59

http://www.michael-puff.de/dirindex.php?folder=Developer/Delphi/Tutorials/
bringt
Zitat:
No input file specified.

:(


Narses - Mo 08.10.07 01:04

Moin!

Hab den Link korrigiert.

cu
Narses


alzaimar - Mo 08.10.07 07:18

In dr Delphi-Praxis habe ich einen Threadpool vorgestellt, der die Arbeit mit Threads stark vereinfacht. Du musst nur noch den Job definieren, der im Hintergrund ausgeführt werden soll.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
Type
  TDownLoadJob = Class (TWorkerThreadJob)
  Private
    ... // Indie-Komponenten 
    fDownloadURL : String;
  Protected
    Procedure Execute(aThread: TWorkerThread);
  Public
    Constructor Create (aDownloadURL : String);
    Destructor Destroy; Override;
  End;

Constructor TDownloadJob.Create (aDownloadURL : String);
Begin
  fDownloadURL := aDownloadURL;
  Synchronized := False; // Wenn die VCL verwendet wird, auf True setzen
  UsesCOMObjects := False; // Wenn COM-Objekte (z.B. ADO) verwendet wird, auf True setzen
// Indie-Komponenten instantiieren
End;
  
Destructor TDownloadJob.Destroy;
Begin
// Indie-Komponenten freigeben
End;

Procedure TDownloadJob.Execute (Thread : TWorkerThread);
Begin
  fIndieComponent.Download (fDownLoadURL);
End;
...
// PendingJobs ist ein Threadpool, der Jobs im Hintergrund ausführt.
PendingJobs.Add (TDownloadJob.Create('www.delphi-forum.de/SampleDownload.zip'));
PendingJobs.Add (TDownloadJob.Create('www.another-source.com/moredownloads.zip'));

Hier mal der Link:
http://www.delphipraxis.net/post735273.html#735273


Novo - Mo 08.10.07 20:43

user profile iconalzaimar hat folgendes geschrieben:
In dr Delphi-Praxis habe ich einen Threadpool vorgestellt, der die Arbeit mit Threads stark vereinfacht. Du musst nur noch den Job definieren, der im Hintergrund ausgeführt werden soll.


Delphi-Quelltext
1:
2:
PendingJobs.Add (TDownloadJob.Create('www.delphi-forum.de/SampleDownload.zip'));
PendingJobs.Add (TDownloadJob.Create('www.another-source.com/moredownloads.zip'));



d.h. dass ich statt


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
URL := Form1.LinkList.Items.Item[0].Caption;
Dateiname := GetFileName(URL);
LinkList.Items.Item[0].SubItems.Strings[1] := 'Läuft';
Application.ProcessMessages;

lStream:=TFileStream.Create(Downloadpfad+Dateiname, fmCreate or fmShareDenyWrite);
try
idhttp1.Get(URL,lStream);
finally
lStream.Free;
end;


das mit PendingJobs aufrufe?
aber ich brauche doch das
lStream:=TFileStream.Create(Downloadpfad+Dateiname...


wie jetzt?