![]() |
Beschränkung von GetTickCount umgehen
Ich hab' das ganze nochmal ein wenig optimiert, muss nicht alle High(DWORD) Millisekunden mehr ausgeführt werden, sondern kann beliebig aufgerufen werden:
Delphi-Quellcode:
[edit=Chakotay1308]Beitrag befindet sich nun
var
QPF: Int64 = 0; function GetTickCountEx: TUpTime; begin if QPF = 0 then QueryPerformanceFrequency(QPF); QueryPerformanceCounter(Ticks); Ticks := Ticks div QPF; with Result do begin MilliSeconds := Ticks mod 1000; Seconds := (Ticks div 1000) mod 60; Minutes := (Ticks div 60000) mod 60; Hours := (Ticks div 3600000) mod 24; Days := ((Ticks div 3600000) div 24) mod 30; Months := ((Ticks div 3600000) div 24) div 30; Years := ((Ticks div 3600000) div 24) div 365; end; end; ![]() |
Re: Beschränkung von GetTickCount umgehen
Falls TUpTime ein eigener Datentyp ist, wäre dessen Deklaration interessant.
|
Re: Beschränkung von GetTickCount umgehen
Der Beitrag war eingentlich als Ergänzung zu einem urspünglichen EIntrag in der Codelib gedacht, ich dachte, der wäre schon lange verschoben worden...
Na ja, ein ![]() |
Re: Beschränkung von GetTickCount umgehen
Zitat:
Zitat:
|
Re: Beschränkung von GetTickCount umgehen
So besser?
Delphi-Quellcode:
var
QPF: Int64 = 0; function GetTickCountEx: TUpTime; begin if QPF = 0 then QueryPerformanceFrequency(QPF); QueryPerformanceCounter(Ticks); if (QPF = 0) or (Ticks = 0) then begin Result.Milliseconds := Word(-1); Exit; end; Ticks := Ticks div QPF; with Result do begin MilliSeconds := Ticks mod 1000; Seconds := (Ticks div 1000) mod 60; Minutes := (Ticks div 60000) mod 60; Hours := (Ticks div 3600000) mod 24; Days := ((Ticks div 3600000) div 24) mod 30; Months := ((Ticks div 3600000) div 24) div 30; Years := ((Ticks div 3600000) div 24) div 365; end; end; |
Re: Beschränkung von GetTickCount umgehen
Zitat:
Warum verläßt Du dich darauf, dass die Funktion den Parameter in einem bestimmten (nicht dokumentierten) Zustand hinterläßt, anstatt den Rückgabewert zu verwenden? |
Re: Beschränkung von GetTickCount umgehen
Hatte ich hie rnicht gestern einen Link gepostet? :gruebel: Wie dem auch sei, kuck dir das mal an:
![]() |
Re: Beschränkung von GetTickCount umgehen
Wenn ich mich nicht irre, war der Link sinnlos: Das selbe steht schon in der Codelib, auch von NicoDE. Ich hab' nur meinen Algorithmus verbessert und wollte, das es eingetragen wird...
|
DP-Maintenance
Dieses Thema wurde von "Chakotay1308" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Windows API" verschoben.
Der Beitrag geht zurück in den öffentl. Bereich zur Diskussion; Source in die Code-Library eingefügt. |
Re: Beschränkung von GetTickCount umgehen
> CodeLib >
![]() Erstmal was zu Dax letztem CL-Code: Ticks ist wärend der Zuweisung an Result in Sekundenintervallen und nicht in Millisekunden ... das Ergebnis stimmt also nicht :warn: So und nun was Neues/Erfreuliches: In Vista hat Microsoft sich endlich dieses Problems gewidmet und ![]()
Delphi-Quellcode:
Function GetTickCount64: UInt64; StdCall;
External 'Kernel32.dll' Name 'GetTickCount64'; Und das Ganze noch als nette Unit, welche auch schon früher läuft:
Delphi-Quellcode:
Einfach Unit einbinden und GetTickCount64 wie eine normale Funktion aufrufen :angel:
Unit GTCUnit;
// (c) 1997-2007 by FNS Enterprize's (FNSE.de) // 2003-2007 by himitsu @ Delphi-PRAXiS.de Interface Uses Windows; Var GetTickCount64: Function(): UInt64; StdCall; Implementation Function _GetTickCount64: UInt64; StdCall; Var Freq, Ticks: UInt64; Begin If QueryPerformanceFrequency(Int64(Freq)) and QueryPerformanceCounter(Int64(Ticks)) and (Int64(Freq) > 0) Then Begin If Ticks >= UInt64(-1) div 1000 Then Result := Ticks div (Freq div 1000) Else Result := (Ticks * 1000) div Freq; End Else Result := 0; End; Initialization GetTickCount64 := GetProcAddress(GetModuleHandle('Kernel32.dll'), 'GetTickCount64'); If @GetTickCount64 = nil Then GetTickCount64 := @_GetTickCount64; End.
Delphi-Quellcode:
Uses Windows, Unit1;
Var C, C2: UInt64; Begin C := GetTickCount64; Sleep(3000); C2 := GetTickCount64; Label1.Caption := IntToStr(C2 - C); End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 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