2010-04-19 13 views
11

Obecnie pracuję nad aplikacją, która wysyła i odbiera plik ze zdalnego serwera. Aby wykonać operację sieciową, używam QNetworkAccessManager.Limit czasu QNetworkAccessManager

Aby przesłać plik używam QNetworkAccessManager :: put() i do pobrania Używam funkcji QNetworkAccessManager :: get().

Podczas przesyłania pliku zainicjuję licznik czasu z czasem wynoszącym 15 sekund. jeśli prześlę niewielki plik, wypełni go w określonym czasie. Ale jeśli spróbuję przesłać plik, który jest bardzo duży, otrzymam limit czasu. Jak więc zdecydować o czasie na wysyłanie dużego pliku.

To samo w przypadku pobierania dużego pliku. Dostaję plik w porcji przez porcję w sygnale readyread(). Tutaj także, jeśli pobierasz duży plik, otrzymuję czas. Jak więc zdecydować o czasie na wysyłanie dużego pliku.

Odpowiedz

17

Użyj sygnału QNetworkReply::uploadProgress() (lub downloadProgress), aby ostrzec Cię, że operacja się rozwija. Następnie ustaw minutnik na 15 sekund po ostatnim powiadomieniu uploadProgress/downloadProgress (z licznikiem czasu uruchomionym po rozpoczęciu pobierania/wysyłania). Jeśli pobieranie kiedykolwiek się zatrzyma, możesz anulować operację po 15 sekundach od ostatniej aktualizacji.

+0

Jak anulować operację pobierania i sprawić, że QNetworkReply emituje httpFinished()? – Temak

+1

@Temak używają 'reply-> abort()' i 'send reply-> finished()' – vladon

+1

To powinno być zaimplementowane przez framework IMO ... – Kolyunya