8.2 Das neue Signalkonzept
Da ich davon ausgehen kann (muss), dass Sie bereits C kennen und schätzen gelernt haben, kennen Sie vermutlich auch die ANSI C-Funktion zur Behandlung von Signalen. Keine Sorge, ob Sie bereits mit dieser Funktion vertraut sind oder nicht, ist hier nicht von Bedeutung. Wenn Sie mit dem Thema vertraut sind, werden Sie sich vermutlich fragen, wozu ein neues Signalkonzept? Für diejenigen, die das alte Konzept kennen, sei der folgende Abschnitt gedacht. Alle anderen können diesen getrost überfliegen bzw. überspringen.
8.2.1 Wozu ein »neues« Signalkonzept?
Das alte Signalkonzept hat schon einige Jahre auf dem Buckel und krankte eigentlich schon immer ein wenig. Versuchen Sie z. B., einen aktuellen Signalstatus abzufragen, ohne diesen zu verändern. So kam es manchmal vor, dass der Signalstatus zur Abfrage verändert werden musste, nur um anschließend einen neuen Signalhandler einzurichten. Somit wird signal() zweimal hintereinander aufgerufen.
Ein weiteres Manko war, dass es nicht möglich war, ein Signal kurz zu blockieren. Man behalf sich immer damit, indem man in einer Schleife ein bestimmtes Flag abgefragte, ob es sich verändert hat oder nicht. Falls nicht, wurde im Prozess einfach die Funktion pause() aufgerufen, um auf die Ankunft des Signals zu warten. Nun konnte es passieren, dass dieses Signal genau in der Schleife und vor dem pause()-Aufruf eintraf. Somit blieb der Prozess in einer Endlosschleife sitzen. Zugegeben, dass dieser Fehler auftrat, war sehr unwahrscheinlich, doch wenn er auftrat, war es kaum noch möglich, diesen Fehler nachzuvollziehen.
|