Domanda

Quindi sono sul mio Raspberry PI, e voglio controllare se un sensore è stato attivato. Sono potenzialmente di scadenza di due cose diverse, però, una da un guscio in cui sono remoto, e l'altro da uno schermo LCD con pulsanti di coppia direttamente collegati all'RPI. Penso che il modo migliore per farlo è quello di eseguire un anello per vedere se l'utente preme un tasto (come il tasto ENTER o qualcosa) o se l'interfaccia LCD ha selezionato per andare avanti. Mi piacerebbe eseguire un ciclo che controlla se l'utente ha premuto un tasto o se una variabile è stata modificata da qualche parte che denota l'interfaccia LCD è stata modificata e quindi andare avanti con il mio codice, ma non conosco il modo migliore per farlo Questo. Attualmente, questo è ciò che ho:

import thread
import time
import globals #this is where i keep my project wide global variables. it this this is a good way to do it.... 

try:
    from msvcrt import getch
except ImportError:
    def getch():
        import sys, tty, termios
        fd = sys.stdin.fileno()
        old_settings = termios.tcgetattr(fd)
        try:
            tty.setraw(sys.stdin.fileno())
            ch = sys.stdin.read(1)
        finally:
            termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
        return ch

char = None

def keypress():
    global char
    char = getch()

thread.start_new_thread(keypress, ())

globals.LCDVar = 0
while True:
    if char is not None:
        print "Key pressed is " + char
        break
    if globals.LCDVar == 1
      break
    time.sleep(.1)
    print "Program is running\n" 

<Run whatever code next>
.

Questo funziona, ma non sono sicuro di cosa succede al filo che è stato creato. Il filo rimane vivo dopo aver premuto una chiave? I Se modifica la variabile invece di premere un tasto, non sarà ancora il filo? Mi sentirei a tuo agio con questo se l'evento avrebbe accadito solo una o due volte, ma questo controllo di tasti / Varble potrebbe accadere 100s o 1000 di volte e non voglio continuare a iniziare nuovi fili più e più volte.

C'è un modo migliore per farlo?

Grazie per qualsiasi consiglio !!

È stato utile?

Soluzione

Il thread che hai creato uscite quando la funzione chiamata start_new_thread restituisce, quindi non è necessario preoccuparti di preoccuparsi per sempre (che è dalla documentazione ufficiale su thread.start_new_thread).

Per quanto riguarda il modo "migliore" per farlo, penso che invertire ciò che viene eseguito in un filo separato e ciò che viene eseguito nella linea di esecuzione principale sarebbe utile.Cioè, funziona in un thread separato e attendere una chiave premi nel thread principale.Questo è tradizionalmente come funzionalità come questa sia implementata e riduce alcune delle complessità del tuo loop.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top