[C++] Zeitmessung in Millisekunden

Jellysheep

Erfahrenes Mitglied
Hi,
mit diesem Code aus einer onTimer()-Funktion versuche ich, eine gleichmäßige Drehung zu ermöglichen:
C++:
akt_tick = timeGetTime();
tick_diff = akt_tick-tick;
glRotatef((spin++)*tick_diff, 0.0, 1.0, 0.0);  
tick = akt_tick;
//weiterer Code
Die Drehung ist am Anfang super, nach ein paar Sekunden springt es aber immer wilder.
Woran liegt das?

//EDIT
Ich verwende VC++ auf Windows
 
Das ist die Drehung des Objektes:
Code:
onTimer(){
  zeichneHintergrund();
  drehePerspektive(spin++);
  zeichneObjekt();
}
 
Was hat dieser (Pseudo?-)Code jetzt mit dem obigen Ausschnitt zu tun?
Das ist eine gescheiterte Erklärung des Problems. :-)

Ich versuchs nochmal:
Eine onTimer()-Methode wird mittels setTimer() etwa alle 40ms aufgerufen, ein Objekt wird jeweils um einen bestimmten Winkel gedreht.
Jetzt kann es sein, dass durch hohe CPU-Auslastung nur alle 45ms aktualisiert wird.
In dem Fall soll sich das Objekt ein bisschen schneller drehen, um die Verzögerung auszugleichen.
Dazu brauche ich aber den Zeitabstand zwischen den zwei Aufrufen von onTimer().
Der von mir gezeigte Code funktioniert aber nicht, da sich das Objekt immer hektischer vor- und zurückdreht.
Warum passiert das?

@Cromon:
Danke für den Link, ich les es mir mal durch. ;)
 
Die Frage ist glaub eher was das spin++ da bewirken soll.

Ich würde das folgendermassen machen:
Code:
...
float m_curentRotationInGrad = 0.0f;
...

void OnTimerUpdate()
{
         DWORD dwDiff = DeineZeitMessFunktion();
         m_currentRotationInGrad += dwDiff * RotationInGradProMillisekunde;
         if(m_currentRotationInGrad > 360.0f)
              m_currentRotationInGrad -= 360.0f;
         glRotatef(m_currentRotationInGrad, ....);
}
 
Dankeschön, ich hab den Code von Cromon angewendet und dabei auch gleich meinen Fehler entdeckt. ;)
Positive Bewertung folgt. ;)


Noch eine Frage:
Kann ich einen "dynamischen" Timer erstellen, sprich die Frequenz im Nachhinein anpassen?
Ich denke, oft setTimer() und killTimer() aufzurufen macht keinen Sinn.
Kann man das Intervall von setTimer noch einstellen, bzw. gibt es z.B. updateTimer()?
 
Zuletzt bearbeitet:
Hi,
braucht ein Multimedia-Timer mehr Rechenleistung als ein Timer mit setTimer() ?
Kann man beim Multimedia-Timer den Zeitabstand zwischen den Aufrufen einstellen, ohne den Timer zu beenden?
 
Mach dir mal keine Gedanken über die Rechenleistung für 'nen Timer, die ist vermutlich verschwindend gering im Verhältnis zu deiner Anwendungslogik.
 
Zurück