2017-07-21 1 views
0

Der Timer startet nach einer gewissen Zeit. Damit der erste Timer-Handler aufgerufen wird, muss ich auf ein Minimum von timer.it_value.tv_sec Sekunden warten. Ich möchte, dass mein Zeithandler sofort nach der Settimer-Funktion aufgerufen wird.So starten Sie den Timer in c sofort

Wenn ich timer.it_value.tv_sec = 0 setze, stoppt der Timer.

Ich versuche, Mechanismus mit Timern ein- und auszuschalten.

timer.it_value.tv_sec = 0; // If I do this timer stops 
timer.it_value.tv_usec = 0; 
timer.it_interval.tv_sec = 2; 
timer.it_interval.tv_usec = 0; 
setitimer (ITIMER_REAL, &timer, NULL); 

Um also sofort auszuführen, habe ich gesetzt timer.it_value.tv_usec = 1, aber es kostet 1 & mgr; s Verzögerung wie unten.

timer.it_value.tv_sec = 0; 
timer.it_value.tv_usec = 1;// Here it is 
timer.it_interval.tv_sec = 2; 
timer.it_interval.tv_usec = 0; 
setitimer (ITIMER_REAL, &timer, NULL); 

Irgendein anderer Weg?

+1

Warum setzen Sie 'it_value.tv_sec' nicht auf die gewünschte Anzahl von Sekunden und rufen Sie * explizit * die Timer-Handler-Funktion auf? Das explizite Aufrufen der Timer-Handler-Funktion entspricht dem Ablauf des Timers. –

+0

Yeah ^^^^ Warum nicht einfach anrufen? –

Antwort

1

Wenn Sie den Timer alle zwei Sekunden mit Ausnahme des Anfang Fall aktiviert werden sollen, ist es nur für zwei Sekunden, aber das Signal sofort erhöhen, bevor Sie den Timer starten, so etwas wie:

#include <signal.h> 

timer.it_interval.tv_sec = 2; 
timer.it_interval.tv_usec = 0; 
raise(SIGALRM); 
setitimer (ITIMER_REAL, &timer, NULL); 

Anhebung SIGALRM ist schließlich, was setitimer (ITIMER_REAL, ...) tun wird, wenn der Timer abläuft.