AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

URLDownloadToFile in Threads?

Ein Thema von Dani · begonnen am 10. Apr 2004 · letzter Beitrag vom 10. Apr 2004
Antwort Antwort
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#1

URLDownloadToFile in Threads?

  Alt 10. Apr 2004, 00:50
Hi,

Tolle Sache, diese Code-Library
http://www.delphipraxis.net/internal...downloadtofile

Aber: was mache ich, wenn ich das IBindStatusCallback in einem Thread verwenden will? Wie soll ich im OnProgress Event reagieren, wenn ich gar nicht weiß, zu welchem Thread (es laufen mehrere) das Ereignis gehört?

Gruß,
Dani
Dani H.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.031 Beiträge
 
Delphi 12 Athens
 
#2

Re: URLDownloadToFile in Threads?

  Alt 10. Apr 2004, 06:06
Du kannst z.B. der Create-Prozedur des Thread's die Label und weitere Objekte übergeben, worin sich der Thread verewigen sollen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: URLDownloadToFile in Threads?

  Alt 10. Apr 2004, 09:14
oder du könntest den Thread "Suspended" starten dann die Labels etc. zuweisen und fortfahren..
Also ungefähr so
Delphi-Quellcode:
TMyThread = class(TThread)
public
  MyLabel1: TLabel;
  MyThreadkennung: String;
  [...];
end;
[...]
var LThread: TMyThread;
begin
  LThread := TMyThread.Create(True);
  LThread.MyLabel1 := Labelxy;
  LThread.MyThreadkennung := 'haupt downloadthread';
  LThread.Resume;
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: URLDownloadToFile in Threads?

  Alt 10. Apr 2004, 11:56
Hmm ich habe mich wieder unverständlich ausgedrückt, bitte verzeiht

Was ich eigentlich meinte ist: Ich muss in der OnProgress Methode auf Eigenschaften des Caller-Threads zugreifen. Habe es vorläufig mal dadurch gelöst, dass ich eine "Owner: TObject" Variable zum Public-Feld des cDownloadStatusCallback hizufügte:

Delphi-Quellcode:
type
  cDownloadStatusCallback = class(TObject,IUnknown,IBindStatusCallback)
  private
    function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
    function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;
    function OnStartBinding(dwReserved: DWORD; pib: IBinding): HResult; stdcall;
    function GetPriority(out nPriority): HResult; stdcall;
    function OnLowResource(reserved: DWORD): HResult; stdcall;
    function OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult; stdcall;
    function OnStopBinding(hresult: HResult; szError: LPCWSTR): HResult; stdcall;
    function GetBindInfo(out grfBINDF: DWORD; var bindinfo: TBindInfo): HResult; stdcall;
    function OnDataAvailable(grfBSCF: DWORD; dwSize: DWORD; formatetc: PFormatEtc; stgmed: PStgMedium): HResult; stdcall;
    function OnObjectAvailable(const iid: TGUID; punk: IUnknown): HResult; stdcall;
  public
    Owner : TObject;
  end;
Und dann im OnProgress Ereignis:

Delphi-Quellcode:
function cDownloadStatusCallback.OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult;
var OwnerThread: TDownloadThread;
begin
 OwnerThread := Owner as TDownloadThread;
  case ulStatusCode of
    BINDSTATUS_FINDINGRESOURCE:
    begin
     OwnerThread.StatusString := 'File found...';
    end;

///.....usw.
end;
Bisher kam noch kein Ausnahmefehler, daher glaube ich einfach mal, dass es funktioniert^...
Dani H.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.031 Beiträge
 
Delphi 12 Athens
 
#5

Re: URLDownloadToFile in Threads?

  Alt 10. Apr 2004, 16:43
Das ist mal ein Auszug aus 'ner kleinen Unit, die ich mir mal vor 'ner Weile erstellt hab'.
Das Teil ist zwar noch nicht das Beste, aber es läuft.

Da wird dir ja nur als Beispiel dienen können, da ich es speziell für mich ausgelegt hab. Wie du zum Beispiel sehn wirst, weiß ich schon vor dem Download, wie groß eie Datei ist, die geladen wird. Aussrdem geb ich den Dateinamen für den Download nicht direkt an - der wird dort drin erst noch zusammengesetzt...

Aufrufen kann man es z.B. so
Delphi-Quellcode:
DownloadThread_1, DownloadThread_2, DownloadThread_3: TDownloadThread;

DownloadThread_1 := TDownloadThread.Create(Label1, Label2, Label5, Label3, ProgressBar1, 'http://www.fnse.de/', 'Smilies_Update.Hash', 57);
DownloadThread_2 := TDownloadThread.Create(Label7, Label8, Label9, Label10, ProgressBar3, 'http://www.fnse.de/', 'Smilies_Update.Daten', 150000);
Repeat Application.ProcessMessages; Until DownloadThread_1.fertig and DownloadThread_2.fertig;
Sleep(50);
DownloadThread_1.Free;
DownloadThread_2.Free;
Delphi-Quellcode:
// z.B.:
// URL = 'http://www.fnse.de/'
// Dateiliste[0].Datei = '..\Smilies_L01\002.gif'
...
DownloadThread_1 := TDownloadThread.Create(Label1, Label2, Label5, Label3, ProgressBar1, URL, Dateiliste[I_1].Datei, Dateiliste[I_1].Groese);
...
Angehängte Dateien
Dateityp: pas download.pas (6,7 KB, 21x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz