[delphi][performancecounter] waarom werkt dit niet

Pagina: 1
Acties:

  • Magic
  • Registratie: September 2001
  • Niet online
ik heb al een poosje ge-utfs-ed, maar ik kon nergens een reden vinden waarom deze code niet zou werken:

code:
1
2
3
4
5
6
7
8
9
10
11
12
procedure calctime(modeset : integer);
var Frequency, test1, test2 : int64;
begin
  case modeset of
  1:  QueryPerformanceCounter(test1);
  2:  QueryPerformanceCounter(test2);
  3:  begin
         QueryPerformanceFrequency(Frequency);
         ShowMessage(IntToStr(round(1000 * (test2 - test1) / Frequency)));
      end;
  end;
end;

bij modeset=1 neemt hij de begintijd, bij modeset=2 neemt hij de eindtijd, en bij 3 berekend hij het verschil in milliseconden. toen ik hem nog niet in een procedure had, maar gewoon aan een knop, werkte hij nog wel.
ongetwijfeld zal het tenenkrommende code zijn, maar het zou zo toch moeten werken, of kijk ik nou ergens overheen?

Steam: Brainfrz82 | PSN: Brainfrz | Discord: Brainfrz


Verwijderd

Maak je test variabelen globaal.
Ik neem aan dat jouw performancecounter oploopt met de tijd. Dan is het ook handiger om test2-test1 te doen ipv test1-test2

[ Voor 68% gewijzigd door Verwijderd op 29-05-2003 23:12 ]


  • Magic
  • Registratie: September 2001
  • Niet online
Verwijderd schreef op 29 mei 2003 @ 23:06:
Maak je test variabelen globaal
net even geprobeert en hij geeft helaas dezelfde waardes als wanneer ik ze lokaal gedefinieerd zou hebben.

Steam: Brainfrz82 | PSN: Brainfrz | Discord: Brainfrz


Verwijderd

De variabelen Frequency, test1 en test2 zijn alleen in de procedure calctime geldig.

Je komt binnen in de procedure en dan wordt er geheugen gereserveerd voor de variabelen. Ze zijn dus leeg! Hierna ga je iets berekenen afhankelijk van de modeset. Daarna verlaat je de procedure en wordt het geheugen weer aan het systeem teruggegeven. Roep je hierna de prodecure weer aan, dan zijn de variableen dus leeg!

Het makkelijkste is dat je de variabelen gewoon meegeeft met de procedure en ze als globale variabelen declareerd.

Je kan misschien een kijken nemen op het nldelphi forum : www.nldelphi.com staat heel veel informatie. Of kijk meteen in dit topic staat een uitgebreid antwoord op je vraag met voorbeeld.

[ Voor 26% gewijzigd door Verwijderd op 29-05-2003 23:22 ]


  • Magic
  • Registratie: September 2001
  • Niet online
ah, geweldig, het was niet alleen het globaal maken van de variabelen, maar als wijze van test had ik ook in de berekening test1 en test2 omgedraaid. daarom gaf hij later nog een verkeerde uitkomst. :/

bedankt jongens!!

* Magic kruipt in een hoekje, en gaat zich diep schamen.

Steam: Brainfrz82 | PSN: Brainfrz | Discord: Brainfrz