Zeitfunktion zur Überwachung mehreren Ereignisse??
-
Hallo zusammen,
ich kann es nicht behaupten, dass ich so viel Ahnung habe, aber ich möchte mich auch nicht geschlagen geben.
Folgende Problem: im Programm gibt es einige Ereignisse, die mit Zeit verbunden sind. Soll z. B. das Licht 60 Sek. an sein, dann soll dies vom Programm gesteuert werden. Das Programm muss aber weiterlaufen (keine Dead Locks produzieren), da andere wichtige Sachen auftreten könnte, die vom Programm aufgefangen werden müssen.
Das Programm verläuft immer im Kreis und dementsprechend muss am Anfang des Programms z. B. diese Zeit für "Licht einschalten" immer abgefragt werden, damit ich weiß, wie lange schon das Licht eingeschaltet ist, um es dann ausschalten zu können.
So kann es sein, dass es mehrere Sachen gibt, die "zeitlich gebunden" sind und wo man deren Zeiten am Anfang des Programms abfragen muss, um entsprechend reagieren zu können.Kann mir bitte jemand helfen, wie ich das am besten auf die Beine bekomme.
Vielen Dank für Hilfe
Humphrey
-
DU sollest Dich da grundsaetzlich mit Threads beschaeftigen.
-
vielleicht ne linked list fuer die "geplanten ereignisse" und ein loop mit 1000ms sleep drin (oder abhaengig vom naechsten geplanten ereignis), der die ereignisliste ueberprueft. fuer so kleine sachen wie licht an und aus brauchts keine threads.
-
Wie gesagt, bin kein Profi. Würde mir sehr viel helfen, wenn ihr eure Ideen ein bißchen ausführlicher beschreiben würdet.Ich weiß gar nicht wo ich anfangen würde.
Thanks.
-
seine idee ist einfach. google ein bisschen nach threading libraries und sieh, was dir gefaellt. dann liest du die docs und dann gehts an die implementation.
meine idee ist auch einfach. du brauchst nur eine liste mit dynamischer laenge (ne linked list oder mit realloc aenderbarer speicherblock) und einen worker loop mit einem sleep drin, der in (un)regelmaessigen abstaenden in einer liste von geplanten ereignissen (z.b. die lampe geht um 18:30 an) abarbeitet und reagiert. funktionspointer sind ganz interessant, wo wir dabei sind. wenn du schon mal von cronjobs gehoert hast, das geht in eine aehnliche richtung (zeitsteuerung).
-
Threads sind "Programme", die in Programmen aufgerufen werden. Da kannst, dann einen Kontroll-Task starten, den zweite gleichzeitig starten, ohne das der erste unterbrochen werden muss. Fuer die UNIX/Linux Welt ist der POSIX-Thread die grundsaetzliche Implemntierung. Einfuehrung hier:
http://math.arizona.edu/~swig/documentation/pthreads/
Die Idee mit der Schleife geht auch und ist einfacher. Du musst nur die Reihenfolge der Abfragen und Starts genau festlegen.
-
Ich scheue mich nicht weiter zu schreiben, auch wenn man sieht, das ich absoluter Anfänger bin. Ich frage mich, warum in der Fachliteratur (habe gerade fünf Bücher bei mir) nicht mal ein Satz über Threads verloren wird. Oder ist es üblich, dass wenn man über C schreibt nichts über Threads gesagt wird?
Es mangelt schon an der Zeit, so dass die Sache mit Threads zu lange dauern würde bis ich mich da reingelesen und verstanden habe.
Könnt ihr mir sagen, ob man diese Aufgabe mit konventionellen Anfänger-Mitteln (wie Funktionen in time.h) lösen könnte und worauf ich da achten sollte?
Danke
-
Threads gehoeren nicht zum C/C++ Standard. Sie werden aber als Libraries auf verschiedenen Betriebssystemen angeboten.
-
Humphrey schrieb:
Könnt ihr mir sagen, ob man diese Aufgabe mit konventionellen Anfänger-Mitteln (wie Funktionen in time.h) lösen könnte und worauf ich da achten sollte?
ja kannst du.
brauchst auf nichts zu achten, ausser dass du in einem unendlichen loop ein sleep drin haben solltest, damit die cpu zeit nicht so stark verbraucht wird.