Pergunta

Então, eu estou no meu Raspberry pi, e eu estou querendo verificar se o sensor tiver sido ativado.Eu sou potencialmente execução fora de duas coisas diferentes que, a partir de um shell que eu remoto, e com a outra uma tela de LCD com um par de botões diretamente ligado ao RPi.Eu acho que a melhor maneira de fazer isso é executar um loop para ver se o usuário pressionar uma tecla (como a tecla enter ou algo) OU se a interface LCD tem selecionado para ir em frente.eu gostaria de executar um loop que verifica se o usuário pressionou a tecla ou se uma variável foi alterada em algum lugar, denotando a interface LCD foi alterado e, em seguida, passar com o meu código, mas não sei a melhor maneira de fazer isso.Atualmente, isso é o que eu tenho:

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>

Isso funciona, mas eu não tenho certeza do que acontece para o thread que o criou.O segmento de permanecer vivo depois de premir uma tecla?Se eu alterar a variável em vez de pressionar uma tecla, não o thread ainda existe?Eu iria me sentir confortável com isso, se o evento só aconteceria uma vez ou duas vezes, mas este keypress/varble de seleção pode acontecer 100s ou 1000s de vezes e eu não quero ficar iniciar novos tópicos mais e mais novamente.

Não há melhor maneira de fazer isso?

Obrigado por qualquer conselho!!

Foi útil?

Solução

A thread criada será encerrada quando a função chamada em start_new_thread retorna, então você não precisa se preocupar em correr para sempre (que é a partir da documentação oficial em thread.start_new_thread).

Quanto a "melhor" maneira de fazer isso, eu acho que reverter o que é executada em uma thread separada e o que é executado na linha principal de execução seria útil.Isto é, fazer o trabalho em uma thread separada e aguardar uma tecla no thread principal.Que tradicionalmente como a funcionalidade de como isso é implementado e reduz a complexidade do seu ciclo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top