![]() |
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:
Die Frage ist nun geht dies Eleganter bzw. kann man die Abweichung genauer hinbekommen?
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; 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 |
AW: Ungefähr Verbleibende Zeit
Ich habe keine Ahnung wie der Algorithmus genau heist, aber Du must die bisherige Zeit mit einbeziehen
Delphi-Quellcode:
Anzahl wäre bei Dir sl.count
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; |
AW: Ungefähr Verbleibende Zeit
Hey danke erstmal für deine Hilfe aber hier bleibt die Zeit bei 9 Sekunden Stehen :/
|
AW: Ungefähr Verbleibende Zeit
Hey alles Klar hab den Fehler Gefunden musste
Delphi-Quellcode:
und
QueryPerformanceFrequency(freq);
Delphi-Quellcode:
einfach Vor die schleife setzten um die startzeit zu haben und
QueryPerformanceCounter(startTime);
Delphi-Quellcode:
zu
time := time +((endTime - startTime) * 1000 div freq)*(Sl.Count-i);
Delphi-Quellcode:
ändern
time :=((endTime - startTime) * 1000 div freq)*(Sl.Count-i);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz