Avatar billede zorkmontana Nybegynder
29. juni 2006 - 16:08 Der er 4 kommentarer og
1 løsning

_LARGE_INTEGER til Int64 med lowpart og highpart

Jeg har posted et spørgsmål før men her er der et andet problem..
jeg kan ikke gennemskue hvordan man skal komme uden om
QueryPerformancefrequency(p);
da p er _LARGE_INTEGER; og QuweyPerformancefrequency skal bruge Int64 men Int64 understøtter ikke Lowpart og highpart.
er der nogen måde at konvertere dette eller hvad skal man gøre?

function wintimefloat:extended;
var
  p:_LARGE_INTEGER;
  e:extended;
begin
  if performancecountfreq = 0 then begin
    QueryPerformancefrequency(p);
    e := p.lowpart;
    if e < 0 then e := e + highdwordconst;
    performancecountfreq := ((p.highpart*highdwordconst)+e);
  end;
  if queryperformancecounter(p) then begin
    e := p.lowpart;
    if e < 0 then e := e + highdwordconst;
    result := ((p.highpart*highdwordconst)+e)/performancecountfreq;
  end else begin
    result := timegettime/1000;
  end;
end;
function wintimefloat:extended;
var
  p:_LARGE_INTEGER;
  e:extended;
begin
  if performancecountfreq = 0 then begin
    function wintimefloat:extended;
var
  p:_LARGE_INTEGER;
  e:extended;
begin
  if performancecountfreq = 0 then begin
    QueryPerformancefrequency(p);
    e := p.lowpart;
    if e < 0 then e := e + highdwordconst;
    performancecountfreq := ((p.highpart*highdwordconst)+e);
  end;
  if queryperformancecounter(p) then begin
    e := p.lowpart;
    if e < 0 then e := e + highdwordconst;
    result := ((p.highpart*highdwordconst)+e)/performancecountfreq;
  end else begin
    result := timegettime/1000;
  end;
end;
    e := p.lowpart;
    if e < 0 then e := e + highdwordconst;
    performancecountfreq := ((p.highpart*highdwordconst)+e);
  end;
  if queryperformancecounter(p) then begin
    e := p.lowpart;
    if e < 0 then e := e + highdwordconst;
    result := ((p.highpart*highdwordconst)+e)/performancecountfreq;
  end else begin
    result := timegettime/1000;
  end;
end;
Avatar billede zorkmontana Nybegynder
29. juni 2006 - 16:09 #1
hmm undskyld der har hvist været en bufferfejl...

function wintimefloat:extended;
var
  p:_LARGE_INTEGER;
  e:extended;
begin
  if performancecountfreq = 0 then begin
    QueryPerformancefrequency(p);
    e := p.lowpart;
    if e < 0 then e := e + highdwordconst;
    performancecountfreq := ((p.highpart*highdwordconst)+e);
  end;
  if queryperformancecounter(p) then begin
    e := p.lowpart;
    if e < 0 then e := e + highdwordconst;
    result := ((p.highpart*highdwordconst)+e)/performancecountfreq;
  end else begin
    result := timegettime/1000;
  end;
end;

det er hvist nemmere at overskue.. ;)
Avatar billede pidgeot Nybegynder
29. juni 2006 - 17:12 #2
Har du reelt BRUG for highpart/lowpart? Kiggede lige din kode nærmere igennem, og så vidt jeg lige kan se vil ((p.highpart*highdwordconst)+e) da altid give det samme som p (fordi du laver et hack der var nødvendigt i din gamle Delphi), hvilket vil sige du kan nøjes med dette:

function wintimefloat:extended;
var
  p:Int64;
  e:extended;
begin
  if performancecountfreq = 0 then begin
    QueryPerformancefrequency(p);
    performancecountfreq := p;
  end;
  if queryperformancecounter(p) then begin
    result := p/performancecountfreq;
  end else begin
    result := timegettime/1000;
  end;
end;

Eller jeg tager måske fejl?
Avatar billede zorkmontana Nybegynder
29. juni 2006 - 18:57 #3
du burde også have pointne herfra også!
takker...
Avatar billede pidgeot Nybegynder
29. juni 2006 - 19:01 #4
Nej, læg du bare et svar og tag dem selv, den her er gratis - det er jo reelt det samme problem som det andet spørgsmål :)
Avatar billede zorkmontana Nybegynder
24. juni 2007 - 17:33 #5
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester