AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GetTickCount / Fehler bei Bereichsprüfung

Ein Thema von Andidreas · begonnen am 15. Jan 2014 · letzter Beitrag vom 16. Jan 2014
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#1

AW: GetTickCount / Fehler bei Bereichsprüfung

  Alt 15. Jan 2014, 15:29
Wie von himitsu schon angedeutet musst Du dann aber berücksichtigen, dass der Wert nach 24,85 Tagen negativ wird und GetTickCount nach 49,7 Tagen wieder bei 0 beginnt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: GetTickCount / Fehler bei Bereichsprüfung

  Alt 15. Jan 2014, 15:31
Wie von himitsu schon angedeutet musst Du dann aber berücksichtigen, dass der Wert nach 24,85 Tagen negativ wird und GetTickCount nach 49,7 Tagen wieder bei 0 beginnt.
Ok, aber wenn gecastet wird ist das doch egal???
Sorry ich verstehs grad net ganz...
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#3

AW: GetTickCount / Fehler bei Bereichsprüfung

  Alt 15. Jan 2014, 15:36
Du willst doch sicherlich eine Zeitmessung implementieren. Wenn Du nun mit GetTickCount eine Startzeit ermittelst und wiederum mit GetTickCount eine Endzeit, dann kann es passieren, dass die Endzeit negativ ist und die Startzeit positiv. Wenn Du nun also einfach so subtrahierst, ziehst Du eine positive Zahl von einer negativen ab, erhältst somit eine negative, mit der Du im Grunde nichts anfangen kannst. Um das zu vermeiden, müsstest Du bei der Subtraktion auch wieder beide Werte in DWORD casten. Wäre es da nicht besser, gleich DWORD zu nehmen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.548 Beiträge
 
Delphi 12 Athens
 
#4

AW: GetTickCount / Fehler bei Bereichsprüfung

  Alt 15. Jan 2014, 15:41
Casten muß man bei der Berechung eigentlich nicht. Alle Variablen müssen, während der Berechnung, nur den selben Typ besitzen.
Je nach dem, ob Integer oder Cardinal zum Rechnen verwendet wird, gibt es immer irgendwo einen Überlauf, beim Überreiten von High und Low,
was sich dann aber aufhebt, wenn der Wert danach wieder auf den selben Typ beschnitten wird.

Aber dort wird dann wieder die aktivierte Überlaufprüfung zuschlagen , weswegen diese Prüfung dort auf jeden Fall deaktiviert werden muß.


Bei GetTickCount64 kommt dieser Überlauf erst nach 600 Mio Jahren (falls ich mich nicht verschätzt hab).
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: GetTickCount / Fehler bei Bereichsprüfung

  Alt 15. Jan 2014, 15:46
Ok, jetzt hats klick gemacht, peinlich

Also wäre es so sinnvoller?

Delphi-Quellcode:
var
wrdStart, wrdEnd : DWord;

If gsPerformCheck = 'YESThen wrdStart := GetTickCount();

If gsPerformCheck = 'YESThen
Begin
  wrdEnd := GetTickCount();
  gdblTimeDiff := ((wrdEnd - wrdStart)/1000);
  prMsgLog(MySQL_Database, tyINF, 99999, '', FloatToStrF(gdblTimeDiff, ffFixed, 5, 3), 'Delete Master Data Tables', gbBlckInfoMsg);
End;
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#6

AW: GetTickCount / Fehler bei Bereichsprüfung

  Alt 15. Jan 2014, 15:50
IMO schon, nur bleibt eben das Problem mit der Uptime > 49,7 Tage. IIRC besteht das nicht, wenn man statt GetTickCount QueryPerformanceCounter und QueryPerformanceFrequency verwendet, sofern GetTickCount64 nicht in Frage kommt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: GetTickCount / Fehler bei Bereichsprüfung

  Alt 15. Jan 2014, 15:58
Frage, warum nicht die signifikanten Bits maskieren und davon dann die Differenz bilden?
Da kann mir der Wraparound doch egal sein?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.548 Beiträge
 
Delphi 12 Athens
 
#8

AW: GetTickCount / Fehler bei Bereichsprüfung

  Alt 15. Jan 2014, 16:07
QueryPerformanceCounter scheint aber auch ein paar Macken zu haben.

In dem Testprojekt vom himXML hatte ich das drin und auf meinem neuen i7 gibt das Ding keine verwertbaren Ergebnisse mehr raus, bzw. die Werte (also Count / Freq) stimmten absolut nicht.
z.B. Mehere Sekunden bis Tage ausgerechnet, aber real nur paar Millisekunden gelaufen oder auch mal andersrum.
Woran das lag, hatte ich auf die Schnelle nicht rausbekommen. (lag eventuell am Switchen der Treads in den 8 Kernen oder am ständigen hoch und runtergetackte der Kerne oder ein bug im Delphi)


Und den RealTimeStampCounter kann man uch schon länger nicht mehr verwenden, seitdem die CPUs dynamisch tackten und da wo der Counter-Takt an den CPU-Tackt gekoppelt ist.
Wenn er überall an die CPU gekoppelt wäre, hätte man damit wenigstens noch die "reale" CPU-Zeit messen können, aber das geht so ja nun auch nicht.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#9

AW: GetTickCount / Fehler bei Bereichsprüfung

  Alt 15. Jan 2014, 16:14
d.h. was würdet ihr vorschlagen?
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
440 Beiträge
 
#10

AW: GetTickCount / Fehler bei Bereichsprüfung

  Alt 15. Jan 2014, 16:15
Ich hatte das mal so gelöst:

Delphi-Quellcode:
function TimeDiff(TickCount: Cardinal): Cardinal;
begin
  {$ifopt Q+}{$define recoveroverflowcheck}{$Q-}{$endif}
  Result := GetTickCount - TickCount;
  {$ifdef recoveroverflowcheck}{$Q+}{$endif}
end;
Diese Funktion kann nur eine maximal Zeitdifferenz von besagten 49 Tagen auswerfen. Wie lange der Rechner läuft spielt aber keine Rolle.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:20 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-2025 by Thomas Breitkreuz