2017-05-27 5 views
1

Ich habe eine kurze Frage. Es ist ziemlich einfach, aber ich bin sehr verwirrt. Ich erstelle einen Timer in C mit dem Terminal. Ich verwende SIGALRM, um Signale zu senden, die den Wert von SUBTRACT_CONST subtrahieren. Ich nehme an, dass es 25 TICKS_PER_SECOND oder 1/25 gibt, was 0.0400 meiner Subtraktionskonstante ist. Ich habe den Signalhandler und den Timer installiert, um alle 40000us in der itimer-Struktur gesetzt zu setzen. In einer meiner Funktionen kann ich jedoch nicht "fangen", wenn die Zeit Null wird. Wenn dieser TICK_PER_SECOND-Wert 32 oder 16 ist, funktioniert es wie erwartet. Mein Vergleich scheint diese unterschiedlichen Tick-Zeiten nicht zu erfassen. Meine Zeitvariable, die diesen Wert enthält, von dem subtrahiert wird, ist ein Double.Überprüfen, wenn ein Doppel ein Null ist

if(TIME == 0) //my very simple comparison 
+0

Ich habe das schon ausprobiert. Mein Timer zählt rückwärts in negative Zeit. Sobald es kleiner als 0 wird, würde diese Bedingung immer erfüllt sein. –

+1

Verwenden Sie einfach ein 'int', Countdown von 25 in Schritten von 1. – harold

+0

Sie müssen nur die richtige Bedingung verwenden, Sie können nur einen genauen Vergleich nicht verwenden. Zum Beispiel "if (TIME <0.00001) ..." oder so ähnlich. Oder tu was @harold gesagt hat und löse dein Problem in ganzen Zahlen. – lurker

Antwort

1

Wenn Sie eine Fließkommazahl für den Timer verwenden, dann vielleicht der einzige Weg ist, um einen Zustand zu verwenden wie:

if(abs(TIME) < number)... 

wo Zahl sehr kleiner Wert wie e-9 als Mittel praktisch Null.

Verwandte Themen