Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: sleep für 150 sec? Kategorie: Programmierung (von André H. - 19.12.2003 9:51)
Als Antwort auf Re: sleep für 150 sec? von Günter - 11.12.2003 1:42

Hallo Günter,

> > ...
> > long timer;
> > ...
> > timer=system.timer();
> > wait system.timer()-timer>Wartezeit
> > ...

>
> Im Handbuch steht, da� der timer bei 2147483647 in -2147483648 überläuft und wenn ich nach der
> beschriebenen Formel arbeite passiert folgendes:
>
> Basis Timer Formelergebnis
> 2147483644    2147483644      0
>                     2147483645        1
>                  2147483646        2
>                 2147483647       3
>                 -2147483648         -4294967292
>                  -2147483647         -4294967291
>                  -2147483646         -4294967290
>
> Nach dem �berlauf würde also die obige Bedingung ewig nicht mehr erfüllt werden, oder sehe ich das falsch?

Du siehst das falsch.
Denn nicht nur der Timer läuft über, sondern jede Variable.
somit wird aus 2147483647+1 immer -2147483648 , egal, ob timer oder normale Long-Variable.
Timervergleiche werden in der Programmierung eigentlich schon immer auf diese Weise gemacht,
da diese immer funzen.
Vieleicht lässt sich das am einfachsten mit der Hex-Schreibweise verdeiutlichen:
0x00000000 bis 0x7FFFFFFF sind die Werte von 0 bis 2147483647
0x80000000 bis 0xFFFFFFFF sind die Werte von -2147483648 bis -1
Addierst Du nun bei 0x7FFFFFFF eins dazu, erhäst Du 0x80000000, also -2147483648.
Addierst Du bei 0xFFFFFFFF (=-1) ein dazu erhälst Du 0.
Der eigentliche Ã?berlauf findet also von -1 zu 0 statt.
Bei der Subtraktion verhält sich das ganze genauso.

Wenn Du jetzt system.timer()-timer rechnest, und timer den Wert 2147483000 hat
und der System-timer bei -214748250 steht, wird also
-2147482500 - 2147483000 gerechnet.
Hier kommt es bei der Berechnung zu einem "Ã?berlauf":
0x8000047C - 0x7FFFFD78
Wie Du siehst aber nicht wirklich. :-)
Das Ergebis wäre hier 1796 (0x704).
Ineressant wäre eher der Timerbereich von z.B. -100 zu +50.
system.timer() - timer:
0x00000032 - 0xFFFFFF9C
Hier findet ein echter Ã?berlauf bei der Berechnung statt.
Das Ergebis ist aber dennoch +150.

> Kann ich den Timer einfach zurücksetzen (z.B. bevor diese Funktion beginnt?)

Kann man. Aber das hätte keinen Sinn.


MfG André H.


Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: