Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IdHTTP friert Programm ein - was tun? (https://www.delphipraxis.net/88970-idhttp-friert-programm-ein-tun.html)

ManuMF 23. Mär 2007 18:40


IdHTTP friert Programm ein - was tun?
 
Hallo,

ich habe ein Programm geschrieben, das per HTTP Dateien hochlädt. Ich habe es an meinem eigenen PC getestet, und da lief es auch perfekt. Wenn ich nun allerdings eine Adresse im Internet verwende, aktualisiert das Programm nur etwa alle 10 Sekunden (der Upload scheint aber normal zu laufen).

Im OnWork des IdHTTP aktualisiere ich den Status einer ProgressBar und führe ProcessMessages aus (sofern AWorkCount durch 100 teilbar ist, um nicht zu viel CPU zu fressen).

Wie kann ich es lösen, damit das Programm nicht einfriert? Es reagiert zwar noch, aber eben erst nach langer Zeit. Auch die Beschränkung im Onwork zu entfernen hat nichts gebracht.

Danke,
ManuMF

mirage228 23. Mär 2007 18:43

Re: IdHTTP friert Programm ein - was tun?
 
Hi,

Versuch mal die Indy-Komponente Delphi-Referenz durchsuchenIdAntiFreeze. Einfach auf die Form ziehen und es sollt gehen :)

mfG
mirage228

ManuMF 23. Mär 2007 19:11

Re: IdHTTP friert Programm ein - was tun?
 
Habe ich jetzt probiert, aber keine Änderung :(

MrKnogge 23. Mär 2007 19:20

Re: IdHTTP friert Programm ein - was tun?
 
Hast du es mal mit Application.ProcessMessages probiert ?

Andernfalls zeig mal bitte den genauen Code.

Gruß

ManuMF 23. Mär 2007 19:27

Re: IdHTTP friert Programm ein - was tun?
 
Ja, siehe oben.

Zum Hochladen letztendlich nur
Delphi-Quellcode:
Antwort := IdHTTP.Post('Dateiname');
und das OnWork:
Delphi-Quellcode:
procedure TUploadForm.IdHTTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);
begin
  UDateiA_A := AWorkCount;
  UDateiG_A := UDateiA_A + UDateiG_X;

  If ((UDateiA_A Mod 100) = 0) then
  begin
    AStatusBar.position := Round(UDateiA_A / UDateiA_M * 100);
    GStatusBar.position := Round(UDateiG_A / UDateiG_M * 100);

    Caption := Format('Upload [%d%%]', [Round(UDateiA_A / UDateiA_M * 100)]);

    Application.ProcessMessages;
  end;
end;
(Die StatusBar und Variablen mit G sind für den Gesamtstatus, da mehrere hochgeladen werden können)

Ich habe auch schon ohne die Modulo-Beschränkung probiert, aber da ändert sich nichts (außer dass im localhost-Betrieb die CPU-Auslastung in die Höhe schnellt).

Abgesehen von den Statusbars wird auch der Rest (ein Timer, ein Button etc.) aufgehalten.

ManuMF 25. Mär 2007 13:26

Re: IdHTTP friert Programm ein - was tun?
 
Hm, ich habe jetzt "auf Kilobyte umgestellt", teile also AWorkCount etc. erst durch 1024 und speichere es in einer neuen Variable, und jetzt klappt es, sogar ohne IdAntiFreeze.

(Ich habe aber noch nicht getestet, ob ohne die Modulo-Beschränkung der Upload über localhost wieder ausgebremst wird.)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:45 Uhr.

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