2010-04-19 11 views
11

Momentan arbeite ich an einer Anwendung, die Datei von Remote-Server sendet und empfängt. Um den Netzwerkbetrieb durchzuführen, verwende ich QNetworkAccessManager.QNetworkAccessManager Timeout

Zum Hochladen einer Datei verwende ich QNetworkAccessManager :: put() und zum Download verwende ich QNetworkAccessManager :: get() Funktionen.

Während des Hochladens einer Datei initialisiere ich einen Timer mit einer Zeit von 15 Sekunden. Wenn ich eine kleine Datei hochlade, wird sie innerhalb des Zeitlimits abgeschlossen. Aber wenn ich versuche, eine Datei hochzuladen, die sehr groß ist, bekomme ich eine Auszeit. So, wie man Zeit für das Hochladen der großen Datei entscheidet.

Gleiches im Falle des Herunterladens einer großen Datei. Ich bekomme die Datei Stück für Stück im Ready() -Signal. Auch hier, wenn ich eine große Datei herunterlade, bekomme ich eine Auszeit. So, wie man Zeit für das Hochladen der großen Datei entscheidet.

Antwort

17

Verwenden Sie das QNetworkReply::uploadProgress() (oder downloadProgress) Signal, um Sie zu warnen, dass der Vorgang fortschreitet. Stellen Sie dann einen Timer für 15 Sekunden nach der letzten Benachrichtigung uploadProgress/downloadProgress ein (der Timer wurde gestartet, als der Download/Upload gestartet wurde.) Wenn der Download jemals beendet wird, können Sie den Vorgang 15 Sekunden nach dem letzten Update abbrechen.

+0

Wie kann ich den Downloadvorgang abbrechen und QNetworkReply veranlassen, httpFinished() auszugeben? – Temak

+1

@Temak verwenden 'reply-> abort()' und 'emit reply-> finished()' – vladon

+1

Dies sollte durch das Framework IMO implementiert werden ... – Kolyunya

Verwandte Themen