Forum: Compiler & IDEs Timer Problem ..


von macke_a (Gast)


Lesenswert?

Hallo!
Ich möchte gerne den Untenstehende Timer stoppen und bei Bedarf weiter 
laufen lassen. Leider finde ich keinen geeigneten Systemaufruf um eine 
saubere Lösung zu programmieren. Ich hoffe irgendjemand kann mir weiter 
helfen!

void handler()
{...}

struct itimerval myTime;
myTime.it_value.tv_sec = 1;
myTime.it_value.tv_usec = 0;

myTime.it_interval.tv_sec = 1;
myTime.it_interval.tv_usec = 0;

signal(SIGALRM, (void(*)(int)) handler);
setitimer(ITIMER_REAL, &myTime, NULL);

Der Timer löst jede Sekunde aus und ruft den handler auf.
Nun möchte ich gerne den Timer stoppen und bei Bedarf wieder aufrufen, 
sodass er erneut die Sekunden weiter zählt und den handler aufruft.

Danke vorab für Eure Antworten!!

mfg macke_a

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Tante Manual sagt mir:

 Timers decrement from it_value to zero, generate a signal, and reset
 to it_interval.  A timer which is set to zero (it_value is zero or
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 the timer expires and it_interval is zero) stops.
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

von macke_a (Gast)


Lesenswert?

Aha...
wo lebt denn Dein Tante "Manual" ?

von macke_a (Gast)


Lesenswert?

Ok ! Danke noch mal für die Info!
Allerdings muß ich sagen, das mir die Lösung nicht so ganz gefällt.

Es gibt doch bestimmt eine Möglichkeit, den Timer individuell zum 
Beispiel mit einem Flag zu löschen und anschließend wieder zu setzen.

Vielleicht hat jemand von Euch noch eine weiter Idee.??

von Rolf Magnus (Gast)


Lesenswert?

man setitimer

von macke_a (Gast)


Lesenswert?

Ok..jetzt habe ich es auch gefunden...
Nun brauche ich noch eine andere Lösung, wie ich am "saubersten" meinen 
Timer unterbrechen kann.
Ich habe schon sämtliche Variation durch und mein Timer läuft immer noch 
im Sekundentakt, es sei denn ich setzte ihn gleich auf 0.

Freue mich auf kreative Antworten!!

Mfg macke_a

von Peter D. (peda)


Lesenswert?

Erzähl dochmal, wovon Du überhaupt sprichst.

Du zählst da irgendwelche Funktionen und Variablen auf, mit denen keiner 
was anfangen kann.

Da muß doch irgendein Quelltext dazugehören, in den man reingucken kann.

Vermutlich ist das irgendein RTOS für irgendeine CPU.

Beides endlich mal anzugeben (Link, Typ) könnte viel helfen.


Peter

von Michael (Gast)


Lesenswert?

Ich verstehe schon was er meint, allerdings habe ich keine Lösung für 
Ihn.

Er will den Timer einfach stoppen, um eine bestimmte Anweisung wie den 
handler zu unterbrechen!

Angenommen der handler macht jede Sekunde eine Ausgabe.

Nun jetzt soll er aufgrund eines Ergeignisses gestoppt werden, sodaß der 
handler nicht mehr im Sekundentakt aufgerufen wird.
Sobald das Ereigniss wieder zurückgesetzt wird, soll der handler wieder 
aktiviert werden.

So hätte ich das jetzt interpretiert!


Michael

von Rolf Magnus (Gast)


Lesenswert?

Dazu gibt's doch die Funktion sigprocmask. Alternativ im Signalhandler 
einfach ein simples:
1
if (gestoppt)
2
  return;

  

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.