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
DerNetteNachbar hat folgendes geschrieben : |
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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!