Entwickler-Ecke
Internet / Netzwerk - IdFTP - Anwendung reagiert nicht
Flamefire - Mi 04.06.08 11:23
Titel: IdFTP - Anwendung reagiert nicht
Wie kann ich bei der IdFTP-KOmpo verhindern, dass wärend des Uploads die komplette Anwendung ausgelastet ist?
Also das ganze formular reagiert nicht mehr.
Erweiterung dazu: Kann ich den aktuellen Fortschritt anzeigen lassen?
Habs schon mit onwork probiert. Aber das wird NIE aufgerufen (mit BP getestet)
EDIT: ich hab indy 9
indy 10 hat mir noch zu viele fehler
Calculon - Mi 04.06.08 12:12
Gegen das Einfrieren kannst du IdAntiFreeze (o.ä.) benutzen, wobei des Ding gelegentlich auch spinnt oder den Update-Vorgang in einen Thread auslagern. Wegen Fortschritt: Es gibt das Ereignis OnWork (o.ä.).
Gruß
Calculon
--
Flamefire - Mi 04.06.08 12:20
onwork hab ich ja schon probiert: wird nicht aufgerufen
da hab ich ja auch ein application.processmessagesdrin
so hab jetzt mal ein
DoWork(wmWrite, AByteCount);
TIdAntiFreezeBase.DoProcess(False);
in writebuffer hinzugefügt...geht jetzt schön sauber
aber nach der übertragung hängt er ne gane weile hier:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TIdTCPConnection.GetInternalResponse; var LLine: string; LResponse: TStringList; LTerm: string; begin LResponse := TStringList.Create; try LLine := ReadLnWait; |
kann ich das umgehen? der macht das um zu wissen, ob die übertragung ok war
edit:
hasb weiter eingegrenzt:
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: 34: 35:
| function TIdSocketHandle.Readable(AMSec: Integer = IdTimeoutDefault): boolean;
function CheckIsReadable(AMSec: Integer): Boolean; var ReadList: TList; begin if not FHandleAllocated then begin raise EIdConnClosedGracefully.Create(RSConnectionClosedGracefully); end;
ReadList := TList.Create; try ReadList.Add(Pointer(Handle)); Result := GStack.WSSelect(ReadList, nil, nil, AMSec) = 1; TIdAntiFreezeBase.DoProcess(Result = False); finally ReadList.Free; end; end;
begin if TIdAntiFreezeBase.ShouldUse then begin if AMSec = IdTimeoutInfinite then begin repeat Result := CheckIsReadable(GAntiFreeze.IdleTimeOut); until Result; Exit; end else if AMSec > GAntiFreeze.IdleTimeOut then begin Result := CheckIsReadable(AMSec - GAntiFreeze.IdleTimeOut); if Result then begin Exit; end else begin AMSec := GAntiFreeze.IdleTimeOut; end; end; end; Result := CheckIsReadable(AMSec); end; |
Flamefire - Fr 13.06.08 23:12
das problem ist immer noch aktuell!
er hängt wärend er auf die bestätigung wartet, dass der uplaod ok war...
was kann ich machen?
Xentar - Sa 14.06.08 00:51
Lager die Übertragung in einen eigenen Thread aus.
Flamefire - Sa 14.06.08 13:06
das würde nur verhindern das das programm blockiert...durch idantifreeze geht das auch
mein problem ist aber, dass der upload normal schnell geht und der dann teilweise 30sec an der einen stelle hängt um auf ne bestätigung zu warten
bei 10 dateien macht das schon keinen spaß mehr
Flamefire - Do 24.07.08 14:56
ok
hab nochmal n bissl nachgeguckt: der upload geht zu schnell. so schnell kann der die datei nicht hochladen (zumindest im vergleich zu ws_ftp)
also muss der da noch iwas nachladen oder was auch immer...
hat denn keiner ne idee warum der dort ewig wartet? oder was der dort macht?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!