ich sitze gerade an einem größeren projekt und komme an einem punkt nicht weiter. ich möchte es dem anwender meiner software ermöglichen dateien von einem server zu laden. dazu müssen bestimmte werte angegeben werden die dann als http request an einen server gesendet werden und der dann eine datei an den client zurückschickt. die übertragung klappt soweit ganz gut, nur komme ich mit den übertragngsdetails nicht ganz zurecht (wieviele bytes/s, wieviel zeit vergangen ist, wieviele bytes insgesamt übertragen wurden). ich arbeite mit dem framework qt. es gibt eine klasse qtime die es ermöglicht eine art stoppuhr zu benutzen. ich starte die uhr und frage nach wieviele sekunden nach dem letzten start vergangen sind. sind mehr als oder genau 1000 ms vergangen, also 1 sekunde, sollen alle statusdetails aktualisiert werden (Downloadspeed/s, Received Bytes, Elapsed Time).
Code: Alles auswählen
// Zustand der Downloadrate, der Downloadzeit und des Downloadvolumens aktualisieren
void Downloader::updateDataReadProgress(int bytesRead, int totalBytes)
{
if(time->isNull())
{
qDebug() << "Timer gestartet";
time->start();
}
// Aktualisierung pro Sekunde durchführen
if(time->elapsed() >= 1000)
{
int dSpeed = bytesRead - bytesTemp;
bytesTemp = bytesRead;
if(dSpeed >= 1000000)
{
dSpeed = dSpeed / 1000000;
gui_downloader->getLabelSpeed()->setText(QString::number(dSpeed) + " MByte/s");
}
else if(dSpeed >= 1000)
{
dSpeed = dSpeed / 1000;
gui_downloader->getLabelSpeed()->setText(QString::number(dSpeed) + " kByte/s");
}
else
{
gui_downloader->getLabelSpeed()->setText(QString::number(dSpeed) + " Byte/s");
}
//Verstrichene Zeit
gui_downloader->getLabelTime()->setText(QString::number(test));
if(bytesRead >= 1000000)
{
bytesRead = bytesRead / 1000000;
gui_downloader->getLabelSize()->setText(QString::number(bytesRead) + " MByte");
}
else if(bytesRead >= 1000)
{
bytesRead = bytesRead / 1000;
gui_downloader->getLabelSize()->setText(QString::number(bytesRead) + " kByte");
}
else
{
gui_downloader->getLabelSize()->setText(QString::number(bytesRead) + " Byte");
}
//Zeit zurücksetzen
qDebug() << "Timer zurückgesetzt";
time->restart();
}
}Code: Alles auswählen
int dSpeed = bytesRead - bytesTemp;
bytesTemp = bytesRead;
das problem was ich jetzt habe ist das es nicht genau pro sekunde ist. habe eine stoppuhr daneben laufen lassen. das kommt daher das die if abfrage nicht genau bei 1000ms greift sondern der wert immer ein paar ms drüber liegt. gubt es eine andere möglichkeit solch einen downloader zu implementieren oder hat einer einen tip für mich ?
lg
marvel