Delphi-Forum.de Delphi-Library.de
C-Sharp-Forum.de C-Sharp-Library.de
Registrieren Login Suche Hilfe Sitemap
Programm friert bei verwendung von DownloadURL ein
spacer
Autor Nachricht
the-chosen1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 16
Dabei seit: 25.02.2010



BeitragVerfasst: Do 25.02.10 19:32  Antworten mit Zitat Beitrag melden
Hey Leute ;)

Hab folgendes Problem... Ich will über DownloadURL (über TActionList) verschiedene Dateien rundter laden. Da diese Aber bis zu 5Mb groß sind, friert das Programm für eine beträchtliche Zeit ein :(
Wie kann ich denn das programm so schreiben, das Ich das programm weiter verwenden kann, während er im Hintergrund die Datei herunter läd?


PS: Ich bin mitlerweile wieder ziemlich aus der Übung hab seit über 2 Jahren nicht mehr mit Delphi gearbeitet :?


Moderiert von user profile iconNarses: Topic aus Dateizugriff verschoben am Do 25.02.2010 um 21:19
Private Nachricht sendenPosting in privater Nachricht zitieren
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic starofftopic star

Beiträge: 1262
Dabei seit: 14.06.2008
Wohnort: root

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Do 25.02.10 19:34  Antworten mit Zitat Beitrag melden
Threads verwenden. Da solltest du hier im Forum einiges finden. Beim DelphiTreff gibt es glaube ich auch ein Tut, und hier vermutlich auch.
Private Nachricht sendenPosting in privater Nachricht zitieren
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star

Beiträge: 3145
Erhaltene Danke: 10
Dabei seit: 28.12.2005
Wohnort: Österreich, Wien

Windows Vista
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 25.02.10 19:35  Antworten mit Zitat Beitrag melden
Hallo und :welcome: im DF,

die Lösung die du suchst wäre ein Thread.

lg elundril

//edit: zu langsam :(

_________________
"Und warum studierst du Informatik?" - "Weil ich gerne Computerspiele spiele, programmieren hass ich eigentlich." *wallbash*
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
the-chosen1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

(Threadstarter)

Beiträge: 16
Dabei seit: 25.02.2010



BeitragVerfasst: Do 25.02.10 21:21  Antworten mit Zitat Beitrag melden
mmhm werd ich machen

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Naja zu früh gefreut :(
Ich bekomm es zwar hin mehrere downloads gleichzeitig zu starten, das programm friert aber dennoch ein :(

Vieleicht hat jemand ein Tip für micht? Bzw. Einen Link, zu einem Forumsbeitrag, der mir weiter helfen könnte :)

Mein Problem jedenfall: Ein thread ist ja kein eigenständiges programm... Folglich ist der thread auch nicht in der Lage, die Datei herunter zu laden :(
Private Nachricht sendenPosting in privater Nachricht zitieren
Luckie
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star

Beiträge: 11063
Erhaltene Danke: 2
Dabei seit: 30.08.2002


WindowsXP Professional SP2
BDS2006, VS C++ Express, Eclipse (Java), Flex (Flash, AS)
BeitragVerfasst: Do 25.02.10 21:48  Antworten mit Zitat Beitrag melden
Ohne Code und ohne zu sehen, was du machst, wird man dir schlecht helfen können.

_________________
Gruß Michael
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star

Beiträge: 2067
Erhaltene Danke: 2
Dabei seit: 09.12.2007


Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Do 25.02.10 23:01  Antworten mit Zitat Beitrag melden
user profile iconthe-chosen1 hat folgendes geschrieben Zum zitierten Posting springen:
Mein Problem jedenfall: Ein thread ist ja kein eigenständiges programm... Folglich ist der thread auch nicht in der Lage, die Datei herunter zu laden :(

Ahja.. und der Firefox startet sich selbst mehrmals, wenn ich 3 Dateien gleichzeitig downloade? Na, auf die Erklärung bin ich gespannt..

_________________
PROGRAMMER: A device for converting coffee into software.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Luckie
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star

Beiträge: 11063
Erhaltene Danke: 2
Dabei seit: 30.08.2002


WindowsXP Professional SP2
BDS2006, VS C++ Express, Eclipse (Java), Flex (Flash, AS)
BeitragVerfasst: Do 25.02.10 23:09  Antworten mit Zitat Beitrag melden
user profile iconthe-chosen1 hat folgendes geschrieben Zum zitierten Posting springen:
Mein Problem jedenfall: Ein thread ist ja kein eigenständiges programm... Folglich ist der thread auch nicht in der Lage, die Datei herunter zu laden :(

Hä? Was willst du uns damit sagen? Warum sollte ein Thread keinen Download durchführen können?

_________________
Gruß Michael
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
the-chosen1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

(Threadstarter)

Beiträge: 16
Dabei seit: 25.02.2010



BeitragVerfasst: Do 25.02.10 23:10  Antworten mit Zitat Beitrag melden
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Ahja.. und der Firefox startet sich selbst mehrmals, wenn ich 3 Dateien gleichzeitig downloade? Na, auf die Erklärung bin ich gespannt..

Nee... Vieleicht bin ich einfach zu blöd... Jedenfalls hab ich nach einigen Tutorials versucht ein Thread zu erstellen -> Jedenfalls ist es mir nie gelungen "DownloadURL" zu verwenden...

Womöglich ist es auch unnötig... Falls jemand ein emöglichkeit hat -> Ich möchte im prinzim nur eine Datei im hintergrund runterladen, am besten noch mit fortschrittsanzeige... Jedenfalls dachte ich, das würde über DownloadURL funktionieren :D

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Hä? Was willst du uns damit sagen? Warum sollte ein Thread keinen Download durchführen können?

Sagen wir es anderst... Ich bekomm es ihrgendwie nicht hin :D
Private Nachricht sendenPosting in privater Nachricht zitieren
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic starofftopic star

Beiträge: 1262
Dabei seit: 14.06.2008
Wohnort: root

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Do 25.02.10 23:17  Antworten mit Zitat Beitrag melden
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Ohne Code und ohne zu sehen, was du machst, wird man dir schlecht helfen können.
Private Nachricht sendenPosting in privater Nachricht zitieren
Astat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star

Beiträge: 72
Dabei seit: 04.12.2009


Windows 2000
D6, D7, D2007, Lazarus
BeitragVerfasst: Do 25.02.10 23:50  Antworten mit Zitat Beitrag melden
Hallo the-chosen1....

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
uses
windows;

function URLDownloadToFile(Caller: IUnknown; URL: PChar; FileName: PChar;
Reserved: DWORD; StatusCB: IUnknown): HResult; stdcall;
external 'URLMON.DLL' name 'URLDownloadToFileA';

function lpThreadFunc(ptrData: Pointer): Integer;
begin
result := URLDownloadToFIle(nil, PChar(ParamStr(1)),
PChar(ParamStr(2)), 0, nil);
end;

var
dwThreadID: LongWord;
hThread: LongWord;
begin
hThread := BeginThread(nil, 0, lpThreadFunc, nil, 0 , dwThreadID);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
end.


lg. Astat
Private Nachricht sendenPosting in privater Nachricht zitieren
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star

Beiträge: 2067
Erhaltene Danke: 2
Dabei seit: 09.12.2007


Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Fr 26.02.10 00:03  Antworten mit Zitat Beitrag melden
Ist ja schön.. du startest nen Thread, nur um eine Zeile sptäer zu warten, bis er fertig ist.

_________________
PROGRAMMER: A device for converting coffee into software.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Astat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star

Beiträge: 72
Dabei seit: 04.12.2009


Windows 2000
D6, D7, D2007, Lazarus
BeitragVerfasst: Fr 26.02.10 00:14  Antworten mit Zitat Beitrag melden
Hallo Xentar, hast recht, mein Fehler, anbei der Rest.

ausblenden Delphi-Quelltext markieren
1:
2:
3:
program Project1;

{$APPTYPE CONSOLE}


lg. Astat
Private Nachricht sendenPosting in privater Nachricht zitieren
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star

Beiträge: 2067
Erhaltene Danke: 2
Dabei seit: 09.12.2007


Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Fr 26.02.10 00:27  Antworten mit Zitat Beitrag melden
Ändert nichts an der Tatsache, dass du wartest, bis der thread fertig ist.

_________________
PROGRAMMER: A device for converting coffee into software.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Astat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star

Beiträge: 72
Dabei seit: 04.12.2009


Windows 2000
D6, D7, D2007, Lazarus
BeitragVerfasst: Fr 26.02.10 00:52  Antworten mit Zitat Beitrag melden
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Ändert nichts an der Tatsache, dass du wartest, bis der thread fertig ist.


Jupp, richtig! aber! :mahn:

Ein Thread ist immer einem bestimmten Prozess zugeordnet und existiert nur innerhalb dieses Prozesses.
Prozess Weg = Thread weg = nix Downlod from URL!!

lg. Astat
Private Nachricht sendenPosting in privater Nachricht zitieren
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star

Beiträge: 3145
Erhaltene Danke: 10
Dabei seit: 28.12.2005
Wohnort: Österreich, Wien

Windows Vista
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Fr 26.02.10 00:56  Antworten mit Zitat Beitrag melden
aber hast du dann nicht das gleiche problem wie ohne thread? du startest deinen thread und sagst deinem hauptthread in dem auch die VCL ist das er auf den 2. Thread warten soll. Demnach ist der VCL-Thread wieder blockiert, was du ja eigentlich vermeiden wolltest weil du ja auf parallelität abzielst.

lg elundril

_________________
"Und warum studierst du Informatik?" - "Weil ich gerne Computerspiele spiele, programmieren hass ich eigentlich." *wallbash*
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star

Beiträge: 2067
Erhaltene Danke: 2
Dabei seit: 09.12.2007


Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Fr 26.02.10 01:05  Antworten mit Zitat Beitrag melden
user profile iconAstat hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Ändert nichts an der Tatsache, dass du wartest, bis der thread fertig ist.

Ein Thread ist immer einem bestimmten Prozess zugeordnet und existiert nur innerhalb dieses Prozesses.
Prozess Weg = Thread weg = nix Downlod from URL!!

Glaub, ich versteh dein Problem langsam, drück dich doch mal klarer aus ;)

Naja, was soll die Anwendung denn machen, während sie wartet? Irgendwas anderes anzeigen?
Oder nichts? Wenn ja, gib ihr halt trotzdem was zu tun.. warte nicht INFINITE, sondern mit ner While Schleife immer ein kleines bisschen, und gib der Anwendung so Zeit, auf Ereignisse zu reagieren (und somit nicht einfriert)

_________________
PROGRAMMER: A device for converting coffee into software.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Astat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star

Beiträge: 72
Dabei seit: 04.12.2009


Windows 2000
D6, D7, D2007, Lazarus
BeitragVerfasst: Fr 26.02.10 01:13  Antworten mit Zitat Beitrag melden
Hallo, es ging primär darum, wie man URLDownloadToFile in einem Thread aufrufen kann, bzw. wie man
einen Thread dafür verwendet.
Das Codeschnipsel sollte nur dies zeigen, und ist deshalb in einer Consolen Applikation implementiert.

Also, man nehme,

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
CloseHandle(BeginThread(nil, 0, lpThreadFunc, nil, 0 , dwThreadID));
end;


und schon ist dieses eine Problem beseitigt.

lg. Astat
Private Nachricht sendenPosting in privater Nachricht zitieren
the-chosen1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

(Threadstarter)

Beiträge: 16
Dabei seit: 25.02.2010



BeitragVerfasst: Fr 26.02.10 21:42  Antworten mit Zitat Beitrag melden
user profile iconAstat hat folgendes geschrieben Zum zitierten Posting springen:
Hallo the-chosen1....

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
uses
windows;

function URLDownloadToFile(Caller: IUnknown; URL: PChar; FileName: PChar;
Reserved: DWORD; StatusCB: IUnknown): HResult; stdcall;
external 'URLMON.DLL' name 'URLDownloadToFileA';

function lpThreadFunc(ptrData: Pointer): Integer;
begin
result := URLDownloadToFIle(nil, PChar(ParamStr(1)),
PChar(ParamStr(2)), 0, nil);
end;

var
dwThreadID: LongWord;
hThread: LongWord;
begin
hThread := BeginThread(nil, 0, lpThreadFunc, nil, 0 , dwThreadID);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
end.


lg. Astat


Tut mir leid, euch so auf die Nerven zu gehen, aber ihrgendwie hab ich das noch nicht ganz verstanden, ich hab mich hier im Forum schon erkundigt und sehr lange gegoogelt, aber nichts wirkliches gefunden...

Also:
Wenn ich es richtig verstanden habe brauche ich zwei threads: Meinen Hauptthread, den ich brauch, damit mein Programm stabil bleibt, wenn ich eine Operation durchführe. Zudem brauche ich einen Zweiten, der während der Verwendung des Hauptthreads die Datei runterläd. (Hintergrund download)
Also muss ich einen Thread erstellen?
Über File -> New -> Other -> Thread object
(Sry hab nur die englische version)
In den Thread muss jetzt die Operation Reingeschrieben werden?
Allerdings komm ich hier nie Weiter... Ich hab schon versucht in dem Thread ein DownloadURL zu definierten - hab auch schon mit dem INDY HTML tool rumgespielt, komm aber leider nicht weiter :(

Um mit meinem Problem weiter zu gehen... Ich will eine Webseite herunterladen und sie nach bildern Durchsuchen (mit PosEx)... Allerdings ist diese Aktion recht Rechenaufwendig. Da der Download ja keine (kaum) rechenleistung benötigt, könnte ich jetzt doch einfach (theoretisch) einen weiteren Thread bauen, der während die Seite durchsucht wird, beginnt die nächste schon herunter zu laden

:)
Private Nachricht sendenPosting in privater Nachricht zitieren
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star

Beiträge: 2067
Erhaltene Danke: 2
Dabei seit: 09.12.2007


Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Fr 26.02.10 22:01  Antworten mit Zitat Beitrag melden
Und der Quellcode, mit dem du es probiert hast, lautet wie ... ?

_________________
PROGRAMMER: A device for converting coffee into software.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Luckie
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star

Beiträge: 11063
Erhaltene Danke: 2
Dabei seit: 30.08.2002


WindowsXP Professional SP2
BDS2006, VS C++ Express, Eclipse (Java), Flex (Flash, AS)
BeitragVerfasst: Fr 26.02.10 22:55  Antworten mit Zitat Beitrag melden
Ich glaube, wir haben noch nicht genug gebettelt. :?

_________________
Gruß Michael
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Beiträge vom vorherigen Thema anzeigen:   
home home