Ist eine Endlosschleife "gesund"?

... komplette Frage anzeigen

2 Antworten

Erst mal vorweg: So etwas macht man nicht. Schäm dich! :)

Für so etwas solltest du immer Interrupts verwenden, die du über "add_event_detect()" und "wait_for_edge()" von "GPIO" mittels Callback benutzen kannst. In der Doku oder bei Google findest du Beispiele dazu! :)

Viel Spaß! :)

PS: Du kannst "wait_for_edge()" natürlich immernoch in einer Endlosschleife aufrufen, trotzdem empfiehlt sich eine vernünftige Abbruchbedingung oder der Einbau eines kleinen Selbsttests nach jedem Event.

Aber ein Spin-Loop, den du da gerade - selbst mit 500 ms Wartezeit - hast, ist eigentlich nicht gerade elegant und sparsam.

Antwort bewerten Vielen Dank für Deine Bewertung

dein Programm mit der Endlosschleife läuft doch innerhalb eines Multi-Task-Betriebssystems.
Laufende Prozesse, somit auch deine Endlosschleife, werden ständig vom Betriebssystem unterbrochen, um auch anderen Programmen Rechenzeit zu geben.
Was also soll da "ungesund" an einer solchen Schleife sein? Linux bietet auch noch die Möglichkeit die Priorität solcher Prozesse von (meine Interpretation) "aggressiv" auf "sehr nett" zu setzen. Dafür gibt es den Befehl nice bzw. renice. 
Vielleicht kannst du auch das Systemprogramm sleep einfügen. Das unterbricht die Endlosschleife für die angegebene Zeit ( in Sekunden).
Möglicherweise bietet auch Python so eine Funktion wie after ( in tcl) an.

Problematisch an solchen Endlosschleifen ist, das man sie schlecht abbrechen kann. Oft muss man das Terminal killen, in dem es läuft oder mit dem kill-Befehl nachhelfen.

Das betrifft aber mehr die Testphase.
Für solche Tcl-Programme habe ich bei mir eine Kopie des Interpreters erstellt und benutze dann killall <Kopie-Name-von-tcl> , ohne damit auch andere Programme zu stoppen.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?