Also dat versteh ich nicht ganz,

wieso übergibst du die Zeit
SetStateTime(Project.CurrentTime);,
wenn du sie eh nicht verwendest?
Delphi-Quellcode:
procedure TStatusForm.SetStateTime(const Seconds: Cardinal);
begin
TimeLabelContent.Caption := SecondsToHours(Project.CurrentTime);
end;
so wird's wohl gemeint sein.
Delphi-Quellcode:
procedure TStatusForm.SetStateTime(const Seconds: Cardinal);
begin
TimeLabelContent.Caption := SecondsToHours(Seconds);
end;
Dann ist diese voll mißt, denn es zählt total falsch.
Nach dem oben schon erwähntem Szenario benötigt mein Programm 2,2 Stunden und deines hab ich nach über 2 stunden bei 11% abgebrochen, jedoch hatte es seiner Meinung nach bis dahin nur 1,5 Stunden gebraucht.
Im Extem gingen schonal in nur 30 Sekunden über 10 Sekunden auf deiner Uhr verloren.
Da OnTime durchschnittlich nicht alle
genau einer Sekunde aufgerufen wird (ist bei deinem Programmaufbau garnicht möglich) muß falsch gezählt werden,
da zwar nach spätestens 1 Sekunde durch den Timer der Aufruf von TStatusForm.OnTime veranlaßt wird, aber durch die eher sperrliche Abarbeitung der Nachrichtenliste deiner Anwendung Einiges untergeht und verzerrt wird.
Es wird ja nur wärend Application.ProcessMessages die Nachrichtenliste abgearbeitet
> siehe TimeDemo (Anhang)
Da läuft ein Timer mit 100ms-Intervall.
Als Versuchswerte bieten sich 0, 50, 100 und 500 an:
- 0 und 50: zu vermuten wäre, daß wegen des geringeren Intervalls die Zeit fast genau wäre, dennoch fehlt Einiges.
- 100: hier könnte man auch 'ne Übereinstimmung vermuten, da beide Intervalls gleich sind.
- über 100 (Timer1.Intervall = 100) muß was fehlen, da hier das Intervall zu groß ist und dadurch auf Jedenfall die Nachrichtenverarbeitung verschleppt wird.
Besser du speicherst die Startzeit und rechnest die tatsächlich vergangene Zeit aus.
(GetTickCount + Integer-Cardinal-Konvertierung sollte hoffentlich mit den bis zu 24,86 Tagen ausreichen)
Delphi-Quellcode:
procedure TStatusForm.OnTime(Sender: TObject);
begin
SetStateTime(GetTickCount - Project.CurrentTime);
end;
procedure TStatusForm.InitStateTime;
begin
Project.CurrentTime := GetTickCount;
SetStateTime(GetTickCount - Project.CurrentTime);
end;
Vergiß aber nicht die vergangene Zeit nach Scanende zu speichern (für deine Statistik).
Wenn ich die Laufzeit bei mir so sehe, dann wäre es nett, wenn man zwischen Cached- und NonCached-Dateioperationen auswählen könnte.
Vorallem ist es Schlimm, wenn nachdem (und natürlich auch wärend) dein Programm lief, alles was auf die Festplatte zugreift teilweise minutenlang braucht ... vorallem ganz nett im Explorer anzusehen ... is hier aber auch kein Wunder, denn schließlich braucht es 'ne kleine Weile, bis so 700-800 MB aus der Systemcache abgebaut und aufgeräumt wurden ... zum Glück paßt da bei mir zur Zeit nicht nochmehr rein ^^
Zitat:
Da müsste ich erst im Quelltext blättern, und nen bissle suchen
ich dachte man weiß in etwa, was man verbrockt hat
aber keine Sorge ... ich seh in deinem Quellcode och nicht so ganz durch ... anderer Codestil und total andere (mir unverständliche) Herangehensweise...
PS:
458.714 - 170 GB
164.051 - 9,45 GB
PSS:
http://www.delphipraxis.net/internal...=663073#663073
Und dat Schaf:
ich liebe es ... is ja auch mein Sternzeichen (jap)
http://fnse.de/S05/1O6.gif
http://fnse.de/S05/1O7.gif
http://fnse.de/S05/1OA.gif
http://fnse.de/S05/1OB.gif
http://fnse.de/S05/1O8.gif
http://fnse.de/S05/1OD.gif
http://fnse.de/S05/1O9.gif
http://fnse.de/S05/1OC.gif
Bin zwar nicht der Copyrightinhaber davon, allerding sollte es keine rechtlichen Probleme geben.
werd' aber bei Gelegenheit bei Natasja nochmal anfragen.
Ein Therapeut entspricht 1024 Gigapeut.