Seite 2 von 3

Re: [Win] GetHTTPFile (Downloaden in memory und mehr)

Verfasst: 08.09.2011 09:23
von Lord
HeX0R hat geschrieben:...
Das Abbrechen der Threads ging allerdings vorher auch schon, man muss nur folgendes beachten:
Wurde der Download noch nicht gestarted, weil er z.B. vom Host noch auf Warteschleife ist,
hängt der Thread in der Funktion InternetReadFile_() fest und kann nicht so ohne weiteres ordnungsgemäss beendet werden.
...
Ich habe nochmal etwas weitergetestet. Bei mir bleibt
der Thread tatsächlich in dieser Zeile hängen:

Code: Alles auswählen

hData = InternetOpenUrl_(hINet, *B\URL, 0, 0, *B\ConnectFlags, 0)
Wenn man dann StopAsyncDownload() ausführt, ist
kein erneuter DL mehr möglich. Das Programm muß dann
beendet und neu gestartet werden.
Gibt es eine Möglichkeit, bei InternetOpenURL_() einen
kürzeren Timeout (nur für diesen Thread) einzustellen?
Jetzt dauert es exakt 1 Minute, bis das Tmieout eintritt.
Aber auch danach konnte ich keinen erneuten erfolg-
reichen DL starten.

Re: [Win] GetHTTPFile (Downloaden in memory und mehr)

Verfasst: 08.09.2011 14:16
von HeX0R
Also so kommen wir nicht weiter.

Geht denn das neue Beispiel bei dir?
Kannst du die Downloads dort ordentlich abbrechen mit den Buttons?

Gib mir doch mal was, was ich in meine IDE kopieren, F5 drücken kann und diesen Effekt sehe.
Falls du mit dubiosen Quellen arbeitest oder der Code warum auch immer geheim gehalten werden soll,
kannst du mir das auch gerne per PN schicken.
Lord hat geschrieben: Gibt es eine Möglichkeit, bei InternetOpenURL_() einen
kürzeren Timeout (nur für diesen Thread) einzustellen?
Entschuldige, das hatte ich völlig übersehen, es gibt nun noch einen optionalen Timeout-Parameter (in ms).
Default ist in der tat 60000, also eine Minute.

Re: [Win] GetHTTPFile (Downloaden in memory und mehr)

Verfasst: 10.09.2011 17:42
von HeX0R
O.k., wieder eine neue Version.

Das große Problem bei asynchronen Downloads ist,
dass sie bei erfolgreichem Download eine Meldung an die Windows-Queue absenden.
Warum ein Problem?
Nun ja, das kann mitunter ein paar millisekunden dauern, bis es in der Queue angekommen ist und mittlerweile
ist der User evtl. ungedultig geworden und hat das Handle bereits destroyed.
Dann kracht es natürlich.

Also blieb mir nix andere übrig, als die Handles mitzuschleppen.

Ein Nachteil: Es wird nun zum kompilieren mindestens Version 4.5 benötigt.
Weil ich eine Liste in einer Struktur habe.
Es sollte aber auch kein großes Problem darstellen, das für ältere Versionen zu einer globalen List umzubauen.
Ich habe dazu aber keine Lust, mir gefällt es so besser ;)

Das ganze sollte mittlerweile sehr robust sein.

Ausserdem gibt es noch eine neue Funktion: FreeAll(), die sollte am Ende des Programms aufgerufen werden,
um alles, was noch nicht "befreit" wurde, aus dem Speicher zu entfernen.

Re: [Win] GetHTTPFile (Downloaden in memory und mehr)

Verfasst: 14.09.2011 20:23
von Lord
Achtung! Neue Version.
.:M:. hat geschrieben:Sehr schön, Danke. :allright:
Dem kann ich mich jetzt uneingeschränkt anschließen
und die Include nur empfehlen.
Selbst bei einem DAU wie mir scheint sie jetzt
"bulletproof" zu sein.

Re: [Win] GetHTTPFile (Downloaden in memory und mehr)

Verfasst: 16.09.2011 23:05
von HeX0R
Noch schnell was dazugebastelt:

\GetFileSize(Handle) -> Gibt Größe des Downloads zurück.
\AsyncDownloadPercentLoaded(Handle) -> Gibt Fortschritt des Downloads als Float zurück: 0.0 = 0% 1.0 = 100%

Siehe das aktualisierte zweite Beispiel hier.

Re: [Win] GetHTTPFile (Downloaden in memory und mehr)

Verfasst: 10.06.2012 10:33
von Lord
Hallo HeXor!

Leider funktioniert Deine GetHTTPFile()-Include nicht
mehr mit der Version 4.61 von PB.
In der Prozedur GetHTTPFile_Thread() liefert der Auf-
ruf von InternetOpenUrl_() immer eine #NULL, es wird
also keine Verbindung aufgebaut.
Ist die Include schon in der neuen PB-Version getestet?

Re: [Win] GetHTTPFile (Downloaden in memory und mehr)

Verfasst: 15.06.2012 23:31
von HeX0R
Lord hat geschrieben:Ist die Include schon in der neuen PB-Version getestet?
Habe ich eben gemacht, kann keine Probleme feststellen.
Hätte mich auch gewundert.

Re: [Win] GetHTTPFile (Downloaden in memory und mehr)

Verfasst: 17.06.2012 11:42
von Lord
Hallo HeX0R!

Du hast (natürlich) recht. Die (oder das ?) Include
macht keine Problem (mehr). :shock:

Ich habe es gerade, nachdem ich die 2 Programme,
in denen ich die/das Include verwende, nochmals
kompiliert - und siehe da: et löppt. :oops:

Ich kann nicht sagen, woran es die Tage vorher ge-
legen hat, daß ich keine Verbindung bekam.
Ich hatte den Sourcecode sowohl mit PB 4.51 als
auch PB 4.61 (PB 4.60 habe ich "übersprungen") in
32 Bit als auch 64 Bit kompiliert. Die beiden 4.51er
Versionen bekamen Verbindung, die beiden 4.61er
keine.
Andere mit 4.61 kompilierte Programme, die ich
dann getestet hatte, bekamen Verbindung ins Netz.
So war ich dann davon ausgegangen, daß es viel-
leicht an HttpGetFile liegen könnte.

Aber so bin ich auch zufrieden. Danke nochmals für
die Bereitstellung des Codes und die geleisteten Hilfe-
stellungen. :allright:

Re: [Win] GetHTTPFile (Downloaden in memory und mehr)

Verfasst: 23.06.2012 22:10
von The Shark
Hab mir heute deine Include angeschaut. Funktioniert auch super. :allright:
Einen Bug hab ich allerdings gefunden:
Wenn man GetFile() benutzt funktionieren AsyncDownloadPercentLoaded() und AsyncDownloadBytesLoaded() nicht.
Ich hab dann nach ein bisschen ausprobieren folgenden Fix gefunden:

das (313ff):

Code: Alles auswählen

               	If Bytes
               		WriteData(*B\FileHandle, *B\Result, Bytes)
                  EndIf
ersetzen mit dem:

Code: Alles auswählen

               	If Bytes
               		fSize + Bytes
               		WriteData(*B\FileHandle, *B\Result, Bytes)
               		*B\BytesLoaded = fSize
                  EndIf
und oben noch ein

Code: Alles auswählen

fSize = 0
hin.
Ich hab allerdings keine Ahnung, ob das so richtig ist, oder das irgendwelche unerwünschten Seiteneffekte hat. Ersetzt man fSize mit Size passieren zumindest mal sehr komische Sachen.

Ich fänds super, wenn du da mal drübergucken und das einbauen könntest :)

Re: [Win] GetHTTPFile (Downloaden in memory und mehr)

Verfasst: 25.06.2012 17:25
von HeX0R
The Shark hat geschrieben:Ich fänds super, wenn du da mal drübergucken und das einbauen könntest :)
Ich hoffe das stimmt so jetzt.
Danke für die Info!