una CPU impegnata al 100% per un ciclo while, mi pare un tantino eccessivo.
Certo è che usare un ciclo while infinito per controllare una variazione di
stato, seppur funzionale, e a volte utile a fini didattici, non è la migliore pratica da adottare se si vuole programmare con un certo stile ed efficienza.
piuttosto che bloccare il programma in un loop attendendo un evento, è bene fare in modo che sia l'avvenimento di un evento che possa fermare un attimo il normale flusso del programma per compiere una azione.
Si tratta di tecniche di programmazione: piuttosto che usare un metodo
polling (cioè continuare a interrogare una
stato in attesa che questo cambi) si ricorre al metodo degli
interrupt (cioè il programma continua il suo corso fino a che non sarà il cambiamento di
stato a interromperlo momentaneamente).
Non specifichi il linguaggio di programmazione, ma da qual che scrivi, credo tu intenda in Python, e che tu stia provando a utilizzare gli interrupt con la libreria Rpi.GPIO.
Non serve racchiudere la rilevazione dell'evento in un loop infinito, se usi gli interrupt.. altrimenti, torni al polling.
ma nel 2019 (quasi 2020), perchè non utilizzare la libreria gpiozero, che tra i tanti vantaggi offre anche una molto più comoda gestione degli interrupt?
un esempio, preso direttamente dalla documentazione di gpiozero:
Codice:
from gpiozero import LED, Button
from signal import pause
led = LED(17)
button = Button(3)
button.when_pressed = led.on
button.when_released = led.off
pause()
una volta dichiarato il pulsante (pin 3), il sistema può rilevare quando premuto (when_pressed) e fare una azione (led.on) e quando viene rilasciato (when _released) e fare altra azione (led.off), usando il metodo degli interrupt.
pause() alla fine serve a evitare che il programma finisca perché giunto al suo termine
come vedi non ci sono tempi di attesa o loop.