Zeit messen

Previous topic - Next topic

S.O.P.M.

Hallo,

und zwar dachte ich mir, mit Hilfe von GETTIMER() beliebige Zeiten zu messen. Im folgenden Beispiel möchte ich den Wert der Variablen Counter je Sekunde erhöhen. Dazu verwende ich eine zweite Variable ElapsedMSecs, zu der ich die seit dem letzten Aufruf von SHOWSCREEN vergangenen Millisekunden addiere. Sobald deren Wert mindestens 1000 erreicht hat, müsste das ziemlich genau einer Sekunde entsprechen.

Code (glbasic) Select
WHILE TRUE
INC ElapsedMSecs, GETTIMER()

IF ElapsedMSecs > 999
ElapsedMSecs = 0
INC Counter, 1
ENDIF

// weiterer Code hier...

SHOWSCREEN
WEND
Wenn ich diesen Code in der Praxis verwende, werden mir die Sekunden jedoch deutlich zu schnell gezählt - etwa doppelt so schnell. In meinem Spiel habe ich daher längst eine andere Möglichkeit verwendet, mit der ich Zeit messen kann, die auch sehr genau funktioniert. Dennoch würde mich interessieren, wo hier mein Denkfehler liegen könnte! Hat jemand eine Idee?
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

mull

Hilfezitat
Gettimer gibt die Zeit seit letztem Aufruf von SHOWSCREEN in 1/1000 sec zurück.

Du vergisst warscheinlich die Zeit die Showscreen braucht.

z.B
Gettimer  z.B 0.7
Showscreen braucht z.B 0.5

Dann sind 1.2 Sek. vergangen, gemessen hast du 0.7
AMD Phenom II x4 955 Proc. 3.2 GHZ,  4GB Ram
Windows 7 64bit Ultima
NVIDIA GeForce GTX 460
Leistungsindex 5,7

S.O.P.M.

QuoteDu vergisst warscheinlich die Zeit die Showscreen braucht.
Jaaa! Das ist es...
Ich habe wohl angenommen, diese Zeit würde mit eingerechnet werden. Darauf bin ich nicht gekommen. Besten Dank!

Damit dieser Code für eine Zeitmessung brauchbar wird, müsste man also diese Zeit noch mit berücksichtigen. Nehmen wir an, ich begrenze die FPS auf 40, dann gehen für den SHOWSCREEN 25 Millisekunden drauf, die ich dann wahrscheinlich von dem gemessenen Wert bei jedem Schleifendurchlauf abziehen müsste!?
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

mull

Nimm  GETTIMERALL()

if  GETTIMERALL() - t  >= 1000 // 1 Sek.
   Bla Bla
   t =  GETTIMERALL()
endif
AMD Phenom II x4 955 Proc. 3.2 GHZ,  4GB Ram
Windows 7 64bit Ultima
NVIDIA GeForce GTX 460
Leistungsindex 5,7

Antidote

oT:
@mull
Mit Deinen Rechnerspecs bist Du ja echt gut dabei ;)
PC Core2Duo e4300, 2GBRam, Geforce 8800GT-1gb, XPsp3
GP2x, Wii, XBox360, Wiz, psp, ps3 usw.

mull

Ja Danke und hab bei GLB nur 60 FPS.
AMD Phenom II x4 955 Proc. 3.2 GHZ,  4GB Ram
Windows 7 64bit Ultima
NVIDIA GeForce GTX 460
Leistungsindex 5,7

S.O.P.M.

Das liegt an Vista :D
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

Schranz0r

Quote from: S.O.P.M.Das liegt an Vista :D
Stimmt nicht! ich hab mehr FPS!
Das liegt an seiner GraKa...
Vsync muss auf Off sein.
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

mull

@Schranz0r

Vielleicht hast du ja recht mit dem Vsync, aber ich weiß nicht wie man es umstellt. ?
AMD Phenom II x4 955 Proc. 3.2 GHZ,  4GB Ram
Windows 7 64bit Ultima
NVIDIA GeForce GTX 460
Leistungsindex 5,7

Schranz0r

gute frage, gibts bei der Karte kein Kontrollcenter?
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

Rechte MAustaste auf den Desktop, dann "Eigenschaften", dort bei Einstellungen/Erweitert irgendwo?