Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Ungefähr Verbleibende Zeit (https://www.delphipraxis.net/186321-ungefaehr-verbleibende-zeit.html)

muhael 24. Aug 2015 10:24

Ungefähr Verbleibende Zeit
 
Hallo DP Team!

Ich habe ein Programm geschrieben, welches Daten Importiert. Je nach Menge der Daten dauert dies auch Unterschiedlich Lang.
Ich habe also versucht mich an der Berechnung der Ungefähren Verbleibenden Zeit auszuprobieren.

Es lief sehr gut der Zeit die zeit an und Zählt Runter aber zum Ende hin ist eine Differenz von 3-10 Sekunden zu sehen.

Hier einmal der Source der Berechnung:

Delphi-Quellcode:
procedure TFNeuClient.BimportClick(Sender: TObject);
  var SL, use : TStringlist;
      i : Integer;
      freq: Int64;
      startTime: Int64;
      endTime: Int64;
      time, timedurchsch : Real;
begin
 // initialisierungen...

  For i := 0 to sl.count-1 do
    begin
      QueryPerformanceFrequency(freq);
      QueryPerformanceCounter(startTime); // Startzeit ermitteln
      // Routine die Durchlaufen wird zum importieren (hier ja unwichtig)
      QueryPerformanceCounter(endTime); // Endzeit eines Durchlaufes
      time := time +((endTime - startTime) * 1000 div freq)*(Sl.Count-i); // Zusammenrechnen
      if i <> 0 then // Division durch 0 Verhindern
      timedurchschn := time/i; // Durchschnitt ausrechnen

      Form1.label3.Caption:='Verbleibende Zeit: ' + FormatDateTime( 'hh:mm:ss',timedurchschn / (24*60*60*1000)); // Anzeigen
      Application.ProcessMessages; // GUI Sagen das das Programm nicht Hängt^^
    end;
    Fmain.initSG;
    Showmessage('Importvorgang abgeschlossen!');
    Form1.Hide;
    Babort.Click;
    Fmain.Enabled:=true;
Die Frage ist nun geht dies Eleganter bzw. kann man die Abweichung genauer hinbekommen?
Ich Denke es liegt an Dem Mittelwert den ich Ausrechne habe bisher aber noch keine Bessere Lösung gefunden :(
für Denkanstöße bin ich dankbar!

LG

muhael

v2afrank 24. Aug 2015 10:55

AW: Ungefähr Verbleibende Zeit
 
Ich habe keine Ahnung wie der Algorithmus genau heist, aber Du must die bisherige Zeit mit einbeziehen
Delphi-Quellcode:
var
 dat,xmess,xneu,xalt:TDatetime;
 Anzahl:Integer;
 n:Integer;
 Restdauer:TDatetime;
 const
  k                = 0.950;
begin
 xneu:=-1;
 xalt=0;
 for n:=1 to Anzahl do
  begin
   dat := time;
   
    //Machwas

   xmess := time - dat;
   if xneu = -1 then
    xneu := xmess
   else
    xneu := K * xalt + (1 - K) * xmess;
   xalt := xneu;


  Restdauer := Anzahl * xneu;
 end;
Anzahl wäre bei Dir sl.count

muhael 24. Aug 2015 11:04

AW: Ungefähr Verbleibende Zeit
 
Hey danke erstmal für deine Hilfe aber hier bleibt die Zeit bei 9 Sekunden Stehen :/

muhael 24. Aug 2015 11:14

AW: Ungefähr Verbleibende Zeit
 
Hey alles Klar hab den Fehler Gefunden musste
Delphi-Quellcode:
QueryPerformanceFrequency(freq);
und
Delphi-Quellcode:
QueryPerformanceCounter(startTime);
einfach Vor die schleife setzten um die startzeit zu haben und
Delphi-Quellcode:
time := time +((endTime - startTime) * 1000 div freq)*(Sl.Count-i);
zu
Delphi-Quellcode:
time :=((endTime - startTime) * 1000 div freq)*(Sl.Count-i);
ändern


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz