/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
millisekunder i delphi
Fra : Delphimann Mann


Dato : 03-10-01 08:34

Hej
Jeg har skrevet nogle rutiner hvis tidsforbrug jeg gerne vil teste.
Jeg har prøvet med funktionen NOW og GETTICKCOUNT, men de returnerer kun
hundrededele sekunder, 10,20,30 o.s.v.
Hvordan løser jeg dette problem ?


--
Posted from ip18.upnxr2.ras.tele.dk [195.215.94.18]
via Mailgate.ORG Server - http://www.Mailgate.ORG

 
 
Thomas Rose (03-10-2001)
Kommentar
Fra : Thomas Rose


Dato : 03-10-01 10:21

Hej Delphimann Mann,

"Delphimann Mann" <c_a@mail.tele.dk> wrote in message
news:6dede24b641923f92a6cab8d17b16756.30063@mygate.mailgate.org...
> Jeg har skrevet nogle rutiner hvis tidsforbrug jeg gerne vil teste.
> Jeg har prøvet med funktionen NOW og GETTICKCOUNT, men de returnerer kun
> hundrededele sekunder, 10,20,30 o.s.v.
> Hvordan løser jeg dette problem ?

Så vidt jeg ved er GetTickCount noget af det mest præcise du kan bruge... og
jeg forstår ikke, hvis du kun får resultatet i hundrededele sekunder. Jeg
har lige forsøgt med et lille testprogram, og det returnerede vha.
GetTickCount resultatet i tusindedele... Desuden foretrækker jeg
GetTickCount til profilering, da Now returnerer en TDateTime der skal
konverteres før den kan bruges...

Hvad er der for et stykke kode (eller flere stykker) du ønsker at
tids-profilere? Måske kan problemet ligge der!? [Hvilken platform kører du
forresten på?]

Cheers,
Thomas



Uffe Kousgaard (03-10-2001)
Kommentar
Fra : Uffe Kousgaard


Dato : 03-10-01 10:43

Hej

Gettickcount returnerer millisekunder, men sidste ciffer er næsten altid 0,
så i praksis bliver det hundrede-dele.
Bedste forslag er at lade din rutine kører 10 gange. Eller kig nærmere her:
http://www.prodelphi.de/

Hilsen
Uffe

"Delphimann Mann" <c_a@mail.tele.dk> wrote in message
news:6dede24b641923f92a6cab8d17b16756.30063@mygate.mailgate.org...
> Hej
> Jeg har skrevet nogle rutiner hvis tidsforbrug jeg gerne vil teste.
> Jeg har prøvet med funktionen NOW og GETTICKCOUNT, men de returnerer kun
> hundrededele sekunder, 10,20,30 o.s.v.
> Hvordan løser jeg dette problem ?
>
>
> --
> Posted from ip18.upnxr2.ras.tele.dk [195.215.94.18]
> via Mailgate.ORG Server - http://www.Mailgate.ORG



Stig Johansen (03-10-2001)
Kommentar
Fra : Stig Johansen


Dato : 03-10-01 17:58

Delphimann Mann wrote:

> Hej
> Jeg har skrevet nogle rutiner hvis tidsforbrug jeg gerne vil teste.
> Jeg har prøvet med funktionen NOW og GETTICKCOUNT, men de returnerer kun
> hundrededele sekunder, 10,20,30 o.s.v.
> Hvordan løser jeg dette problem ?
>

Hej.

Jeg har ikke selv haft brug for dette, men i løbet af årene, mener jeg der
er flere, der har haft samme udfordring.

Prøv at søge på 'high speed timer' eller 'high resulution timer'.

Så vidt jeg husker, er der noget i 'mmsystem' - uniten, der kan bruges.

(Jeg har selv været tilfreds med gettickcount)

--
Med venlig hilsen / Best regards
Stig Johansen
linux@w3data.dk

Casper A. Hansen (04-10-2001)
Kommentar
Fra : Casper A. Hansen


Dato : 04-10-01 09:57

"Delphimann Mann" <c_a@mail.tele.dk> wrote in message news:<6dede24b641923f92a6cab8d17b16756.30063@mygate.mailgate.org>...
> Hej
> Jeg har skrevet nogle rutiner hvis tidsforbrug jeg gerne vil teste.
> Jeg har prøvet med funktionen NOW og GETTICKCOUNT, men de returnerer kun
> hundrededele sekunder, 10,20,30 o.s.v.
> Hvordan løser jeg dette problem ?

Det er korrekt at GetTickCount og Now kun returnere 1/100 sekund.

QueryPerformanceCounter tæller hele tiden op, og
QueryPerformanceFrequence er en konstant for hvormeget
QueryPerformanceCounter tæller op hvert sekund.

Nedenstående er et eksempel på hvordan man kan bruge dem.

uses
Windows;

procedure ResetTimer(out ATimer : Int64);
begin
QueryPerformanceCounter(ATimer);
end;

function GetCurrentTimems(const ATimer : Int64) : Integer;
var
wTime : Int64;
wFrequency : Int64;
begin
QueryPerformanceCounter(wTime);
wTime := wTime - ATimer;
if QueryPerformanceFrequency(wFrequency) then begin
Result := wTime * 1000 div wFrequency;
end else begin
Result := -1;
end;
end;

procedure DinFunktion;
var
wTime : Int64;
begin
Reset(wTime);

...

OutputDebugString(PChar(Format('Det tog: %d ms',
[GetCurrentTimems(wTime)])));
end;

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste