Zeitdifferenz und frei laufender Zähler
-
Ich habe einen Zähler der Millisekunden zählt. Wie kann ich bei Differenzen Überläufe verhindern? Beispiel
`
__u32 timeout = GET_COUNTER() + 3000; // Drei Sekunden in der Zukunft
while (timeout > GET_COUNTER())
{
// Mach was 3 Sekunden lang
}
`
Das funktioniert nur, solange GET_COUNTER()+3000 keinen Überlauf produziert.
Hat jemand eine Idee?
Danke :schland:
-
die COUNTER werte in eine signed Wert speichern bzw. casten, dies werte voneinander subtrahieren und betrag bilden.
-
int timeout = (int)GET_COUNTER() + 3000; while ( abs((int)GET_COUNTER()-timeout)>=0){ .... }
-
Die Bedingung : abs( xx )>=0
ist meines Wissens immer wahr.
-
stimmt... das ">=0" muss weg...
das genau "0" zutriffst ist nicht immer gesagt...
abs(...) > 10
so ists besser etwas ungenauer...
-
man bin ich verwirrt.. so gehts;)
int timeout = (int)GET_COUNTER(); while ( abs((int)GET_COUNTER()-timeout)<=3000){ .... }
-
Get's nicht auch ohne fabs ?
__u32 timeout = GET_COUNTER() ; // Drei Sekunden in der Zukunft
while ( ( GET_COUNTER()-timeout ) > 3000 )
{
// Mach was 3 Sekunden lang
}Es könnte nämlich sein, dass es bei der vorigen Implementierung bei kleinen Timeouts, leicht mal zu einem stecken bleiben des Programms kommen kann.
Beispielsweise könnte das Windows (sofern du nicht ein Echtzeitbetriebssystem verwendest) mal ein wenig länger beschäftigt sein und schon ist es aus.
-
Ne ist es nicht.. bei meiner zweiten implementierung, ist der wert irgendwann 3000 oder > 3000 dann wird die forschleife verlassen;) in der ersten implementierung könnte dies der fall sein ja..
-
Hast recht, Denkfehler von mir.