Komische Frametimevariation
-
Hallo an Alle!
Ich bin neu hier und hoffe, dass das der richtige Berecih für meine Frage ist.
Also ich schreibe an einem 3D-Spiel und habe festgestellt, dass die Framedauer in etwa alle 20-50 Frames 10 mal länger ist als sonst.
Zum Test hab ich folgendes Minimalprogramm geschrieben und auch da das Gleiche.
Alle 20-50 Durchläufe dauert ein Durchlauf ca. 0.01s und sonst ca. 0.001s .#include "stdafx.h" #include <iostream> #include <GL/glfw.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { float lasttime,frametime=0; if( !glfwInit() ) { fprintf( stderr, "Failed to initialize GLFW\n" ); return false; } bool running=true; lasttime = glfwGetTime(); while (running) { frametime=glfwGetTime()-lasttime; lasttime=glfwGetTime(); cout << "frametime= "<< frametime << endl; } }
Ich benutze Visual C++ 2010 Express und zur Zeitberechung die OpenGL-Bibliothek glfw.
Hat jemand eine Idee, woran das liegen könnte?
-
Hintergrundprozesse duerfen auch mal Rechenzeit bekommen.
-
Erst mal Danke für die schnelle Antwort.
Das mit den Hintergrundprozessen ist natürlich logisch.
Nur sollte doch dann bei konstanten Hintergrundprozessen auch immer ca. die selbe Zeit (also ca. 1/100s)addiert werden.
Allerdings verzehnfacht sich ja die Dauer immer, egal wie lange der Schleifeninhalt dauert.
Also bei dem großen Programm dauert ein Frame normalerweise 1/100s und bei den Schwankungen dann nicht 2/100s, sondern eben 1/10s , was dann zu Ruckeln führt.
-
Die Zeitdifferenz kann auch durch Addition entstanden sein, nicht durch Multiplikation. Und bei konstanter Hintergrundlast bleibt die Rechenzeit auch constant, egal wie gross dein Spiel ist.
-
Ok, danke erstmal,
nur bleibt sie ja eben nicht konstant, und beim kleinen programm springt sie von 1/1000 auf 1/100, also ca PLUS 1/100 und MAL 10,
beim großen Programm springt sie von 1/100 auf 1/10, also ca PLUS 1/10 und MAL 10
(bei der selben Hintergrunbelastung).Also wird die Framedauer ja augenscheinlich alle 20-50 Frames mit 10 multipliziert, und das verstehe ich nicht.