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
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. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
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.??
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.