Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Restzeit berechnen


DerNetteNachbar - Fr 06.03.09 15:38
Titel: Restzeit berechnen
Grüsse euch,
wie ihr schon aus dem Thread Titel erkennen könnt geht es um Zeit. Und zwar möchte ich die Zeit berechnen die mir bei einer Datenbankabfrage verbleibt bzw. die Gesamtzeit daraus errechnen.
Zur Verfügung habe ich die Gesamtanzahl Datensätze, die abgearbeiteten Datensätze, die abgelaufene Zeit.
Hab es bereits versucht mit dem Dreistaz zu rechnen, leider kommen da falsche Zahlen raus.
Wäre nett wenn einer mir helfen könnte.

MfG

Nachbar


Narses - Fr 06.03.09 15:58

Moin!

Das ist relativ einfach, lade dir einfach die Komponente TFluxCompensator von http://www.futurecomponents.net runter, die kann das. Gibt auch glaube ich eine deutsche Übersetzung, heißt TWahrsagen... :roll: :zwinker:

Das geht nicht, woher willst du genau wissen, wie lange etwas dauert, solange der Vorgang noch läuft. Das kann man nur schätzen. :nixweiss:

cu
Narses


Delete - Fr 06.03.09 15:59

Einfaches Rechenbeispiel: 60 von 200 Datensätzen in 30 Sekunden.
200 DS / 100 % = 2 ( => 1 % von Gesamt)
60 DS / 2 = 30 (=> 30 % Fortschritt)
30 Sec. / 30 % * 100 = 100 (=> 100 Sekunden für 100 %)

Wobei das wie bereits gesagt ja nur Näherungswerte sein können, die sind so aussagefähig wie die Schätzwerte, die der Explorer bei Dateioperationen anzeigt.


DerNetteNachbar - Fr 06.03.09 16:15

An DeddyH: kannst du mir bitte dein Beispeil etwas näher erläutern.

MfG


Delete - Fr 06.03.09 16:52

Ist doch ganz einfach: Du teilst die Gesamtanzahl der Datensätze durch 100, damit erhältst Du den Wert, der einem Prozent entspricht. Durch diesen teilst Du nun die Anzahl der abgearbeiteten Datensätze und erhältst den bisherigen Fortschritt in Prozent. Durch diese Zahl teilst Du nun die bislang benötigte Zeit. Heraus kommt dabei ein Prozent der geschätzten Gesamtzeit, welches Du nun nur noch mit 100 multiplizieren musst.


Th69 - Fr 06.03.09 17:12

Gesamtanzahl Datensätze: N
abgearbeitete Datensätze: n
abgelaufene Zeit: t(n)

=> Restzeit ~= t(n) / n * (N-n)

-------------------------------

Beispiel:
N = 100
n = 10
t(n) = 20 sec

=> Restzeit ~= 20 sec / 10 * (100 - 10) = 2 sec * 90 = 180 sec

=> Gesamtzeit = 20 sec + 180 sec = 200 sec


DerNetteNachbar - Fr 13.03.09 14:37

Vielen Dank für die Formel, wirklich Super.
Jetzte geb ich das auf ein Label aus. Erstmal natürlich in Sekunden. Jetzt habe ich mir gedacht, konvertierst halt in Minuten. Gesagt, getan, hab ich des durch 60 geteilt. Allerdings kommt jetzte sowas wie 2,1 Minuten raus. Ist natürlich etwas Käse. Möchte das in dem Format haben 1 Minute, 30 Sekunden. Allerdings ist mir das bisher nicht gelungen.
MfG

Nachbar


Xentar - Fr 13.03.09 14:43

Schau dir mal FormatDateTime an, vielleicht hilft dir das.
Oder, wenn du händisch dividieren willst: div oder mod

Da dies aber nicht mehr viel mit der Restzeit selber, sondern eher mit der Formatierung der Ausgabe zu tun hat, solltest du einen neuen Thread aufmachen.


JüTho - Fr 13.03.09 15:00

Da dieses Unterforum sowohl zu Delphi als auch C# gehört, verweise ich auf TimeSpan.ToString mit passendem Argument (nicht DateTime). Jürgen


DerNetteNachbar - Fr 13.03.09 15:19

Hallo, hat sich bereits erledigt danke trotzdem für euere Mühe:
Lösung:

Delphi-Quelltext
1:
2:
3:
m := s div 60;
if s >= 60 then
s := s - 60 * (s div 60) + 1;


MfG

Nachbar


JüTho - Fr 13.03.09 16:46

user profile iconDerNetteNachbar hat folgendes geschrieben Zum zitierten Posting springen:
Hallo, hat sich bereits erledigt

Naja, um 13.37 Uhr hatte es sich noch nicht erledigt. Woher hätten wir bis 14.18 Uhr erraten sollen, dass Dich unsere Antworten nicht mehr interessieren?

Übrigens sind Standard-Formatierungsbefehle immer besser: Wenn Du bei der nächsten Aufgabe Stunden oder Millisekunden berücksichtigen musst, fängst Du mit einer neuen Routine an. Eine Format-Anweisung gilt allgemein.

Jürgen