evdev - завершить цикл чтения - PullRequest
1 голос
/ 02 февраля 2020

Я разрабатываю небольшое приложение на Raspberry Pi. Для этого вопроса я могу свести его к использованию поворотного энкодера. Я нашел использование dtoverlay наиболее удобным для меня способом. Следовательно, я использую модуль evdev в python3. Мой текущий код выглядит следующим образом:

import time
from threading import Thread
from evdev import InputDevice, events
import evdev


rotary_dev = InputDevice('/dev/input/event1')

def rotaryAction(dev):
   for ev in dev.read_loop():
       ev = evdev.util.categorize(ev)
       if isinstance(ev, events.RelEvent):
           if ev.event.value == 1:
               print("Value: ",ev.event.value)
           elif ev.event.value == -1:
               print("Value: ",ev.event.value)

t = Thread(target=rotaryAction, args=(rotary_dev,))
t.start()

while True:
   try:
       time.sleep(5)
   except KeyboardInterrupt:
       print("Interrupt")
       #Do something to stop the wait for device events
       break

Теперь мой вопрос, как я могу завершить эту программу наилучшим образом. Я не могу остановить поток, потому что для l oop ожидает событие на устройстве. Я думал как-то подражать событию, но я не уверен (= я понятия не имею), как это сделать. Я не нашел ссылок в Интернете, интересно почему ..

Я ценю вашу помощь!

...