![]() |
TFileTime addieren
Wie addiere ich zwei TFileTime-Werte?
Delphi-Quellcode:
Das stimmt irgendwie nicht. Denn wenn ich das in eine Zeit umwandele,
CPUTime.dwLowDateTime := ProcList.Items[i].KernelTime.dwLowDateTime + ProcList.Items[i].UserTime.dwLowDateTime;
CPUTime.dwHighDateTime := ProcList.Items[i].KernelTime.dwHighDateTime + ProcList.Items[i].UserTime.dwHighDateTime;
Delphi-Quellcode:
kommt ein falscher Wert dabei raus.
FileTimeToLocalFileTime(CPUTime, lft);
FileTimeToSystemTime(lft, st); GetTimeFormatW(LOCALE_SYSTEM_DEFAULT, TIME_FORCE24HOURFORMAT, @st, nil, TimeStr, SizeOf(TimeStr)); |
Re: TFileTime addieren
Wozu addierst Du die Werte denn bzw. was soll dabei rauskommen?
mfG mirage228 |
Re: TFileTime addieren
Die CPU Zeit eines Prozesses setzt sich zusammen aus der zeit, die er im Kernel-Mode und User-Mode war. Deswegen muss ich sie addieren.
|
Re: TFileTime addieren
Hi,
Also in meiner D7 W32-SDK Hilfe steht zu FileTime Zitat:
mfG mirage228 |
Re: TFileTime addieren
Hm, und wie kopiere ich das in eine LARGE_INTEGER Struktur? Und wie bekomme ich davon dann wieder die Zeit?
|
Re: TFileTime addieren
Wie wärs z.B. damit:
Delphi-Quellcode:
type TLargeTime=record
case boolean of True: (DWlo:cardinal;DWHi:cardinal); False: (QW:int64); end; //kein Ahnung ob lo oder hi zuerst kommt, aber da wir bei little endian sind....
Delphi-Quellcode:
Edit: Wichtig ist, dass in ASM bei der Addtion der Hi DWords ein "adc" statt eines "add" genommen wird, um den Übertrag aus der zuvor erfolgten Addition (hier reicht add) der Lo DWords mitzunehmen.
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c:TLargeTime; begin a.DWlo:=5; a.DWHi:=0; memo1.lines.add('A: '+inttostr(a.qw)); b.DWlo:=0; b.DWHi:=6; memo1.lines.add('B: '+inttostr(b.qw)); c.qw:=a.qw+b.qw; memo1.lines.add('C: '+inttostr(c.qw)); end; Edit2: Was die Unit Windows nicht so alles bietet :mrgreen:
Delphi-Quellcode:
PS: Irgendwie beist sich bei der Bezeichnung doch was:
_LARGE_INTEGER = record
case Integer of 0: ( LowPart: DWORD; HighPart: Longint); 1: ( QuadPart: LONGLONG); end; 1. DateTime -normalerweise double 2. dw* -steht eher für DWORD 3. Was ist dann DW*DATETIME? |
Re: TFileTime addieren
Zitat:
hier ![]() mfg Leonard |
Re: TFileTime addieren
Danke für den Link:
Delphi-Quellcode:
PS: Man sollte bei der CPU-Zeit auch nicht die Zeitzone berücksichtigen. :mrgreen:
CPUTime64.LowPart := ProcList.Items[i].KernelTime.dwLowDateTime + ProcList.Items[i].UserTime.dwLowDateTime;
CPUTime64.HighPart := ProcList.Items[i].KernelTime.dwHighDateTime + ProcList.Items[i].UserTime.dwHighDateTime; CPUTimeft.dwLowDateTime := CPUTime64.LowPart; CPUTimeft.dwHighDateTime := CPUTime64.HighPart; //CPUTime := (ProcList.Items[i].KernelTime.dwLowDateTime shl 32) + ProcList.Items[i].UserTime.dwHighDateTime; FileTimeToSystemTime(lft, st); GetTimeFormatW(LOCALE_SYSTEM_DEFAULT, TIME_FORCE24HOURFORMAT, @st, nil, TimeStr, SizeOf(TimeStr)); |
Re: TFileTime addieren
Hallo Michael,
du hast Sirius' Ergänzung offenbar überlesen: Zitat:
Das hier Zitat:
Gruß Hawkeye |
Re: TFileTime addieren
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:40 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