Entwickler-Ecke

Sonstiges (Delphi) - restzeit berechnen beim sicherungstool


sintec - Fr 25.05.07 12:02
Titel: restzeit berechnen beim sicherungstool
Hallo Leutz,

irgendwie komme ich nicht auf die Formel um die Restzeit zu berechnen.

habe auch schon so manche Foren durchsucht und vieles ausprobiert, doch es ist immer komplett fasch.

folgende Daten habe ich:

Delphi-Quelltext
1:
2:
3:
filessize :int; //größe aller dateien zusammen die gesichert werden sollen
gesichertefilesize :int; //Größe der gesicherten dateien (wird nach jeder gesicherten Datei neu berechnet);
startzeit, tickzeit :DWord; //Variablennamen erklären sich von selbst



Wie kann ich daraus die Restzeit berechnen oder fehlt mir noch irgendwas?


uko - Fr 25.05.07 12:39

Also eigentlich hast Du alles:

Du mußt nach dem Speichern der ersten Datei aus Startzeit und Tickzeit die Durchsatzrate (also wieviele Bytes pro Zeiteinheit uebertragen wurden) bestimmen. Daraus kannst Du dann eine Abschätzung für die Restdauer erstellen.

Erwarte allerdings nicht, daß die immer stimmt: die Durchsatzrate bleibt mitnichten immer gleich. Am besten Du berechnest sie nach jeder weiteren übertragenen Datei neu und passt die Schätzung an.

HTH,
Ulrich


sintec - Fr 25.05.07 13:18

dann würde es ungefähr so aussehen:


Delphi-Quelltext
1:
restzeit := filessize div (gesichertefilesize div (tickzeit - startzeit));                    


oder habe ich jetzt ein Denkfehler?


uko - Fr 25.05.07 13:31


Delphi-Quelltext
1:
restzeit := (filesize - gesichertefilesize) * ((tickzeit - startzeit) / gesichertefilesize)                    


Ulrich


sintec - Fr 25.05.07 14:06

user profile iconuko hat folgendes geschrieben:

Delphi-Quelltext
1:
restzeit := (filesize - gesichertefilesize) * ((tickzeit - startzeit) / gesichertefilesize)                    


Ulrich


So zeigt es immer 0 an, obwohl er ca. 2 Min für die Verarbeitung braucht!


uko - Fr 25.05.07 14:24

Und warum? Hast Du schon mal die Werte im Debugger geprüft? Nur so als kleinen Tip: so lange die erste Datei läuft, dürfte bei Dir der Wert von Tickzeit auf 0 stehen.
Anders ausgedrückt: du kannst erst ab der zweiten Datei mit einer sinnvollen Zeit rechnen. Wenn Du so was schon für die erste Datei brauchst, dann könntest Du z.B. ein kleines Testfile uebertragen, damit die Uebertragungsrate bestimmen und diese dann als Ausgangswert für die eigentliche Übertragung hernehmen. Sobald dann die erste Datei durch ist, kannst Du wie oben weiterrechnen.

Ulrich


sintec - Fr 25.05.07 14:42

user profile iconuko hat folgendes geschrieben:
Und warum? Hast Du schon mal die Werte im Debugger geprüft? Nur so als kleinen Tip: so lange die erste Datei läuft, dürfte bei Dir der Wert von Tickzeit auf 0 stehen.
Anders ausgedrückt: du kannst erst ab der zweiten Datei mit einer sinnvollen Zeit rechnen. Wenn Du so was schon für die erste Datei brauchst, dann könntest Du z.B. ein kleines Testfile uebertragen, damit die Uebertragungsrate bestimmen und diese dann als Ausgangswert für die eigentliche Übertragung hernehmen. Sobald dann die erste Datei durch ist, kannst Du wie oben weiterrechnen.

Ulrich


Ja das ist Ok so, ich brauch es auch nicht für die erste Datei.

Kann es mit der Änderung zusammenhängen die ich gemacht habe?

Statt "/" habe ich "div" gesetzt weil er an sonsten mit der Fehler ausgibt:

Quelltext
1:
[Pascal Fehler] [...]: E2010 Inkompatible Typen: 'Cardinal' und 'Extended'                    


uko - Fr 25.05.07 14:51

Das Ersetzen durch DIV kann sehr wohl was ausmachen (hängt von der Größe der einzelnen Werte ab)


Delphi-Quelltext
1:
restzeit := round((filesize - gesichertefilesize) * ((tickzeit - startzeit) / gesichertefilesize));                    


Ansonsten: prüf mal, ob die Ausgangswerte für die obige Formel stimmen.


Ulrich