12345678910111213141516171819202122232425262728293031323334353637383940 |
- from threading import Thread
- from queue import Queue
- import time
- class Input:
- _t = None
- _stop = False
- _q = Queue()
- interval = 1
- _read_cb = None
- def __init__(self, read_cb) -> None:
- self._read_cb = read_cb
- def start(self):
- if not self._t:
- self._stop = False
- self._t = Thread(target = self._main)
- self._t.setDaemon(True)
- self._t.start()
- def stop(self):
- if self._t:
- self._stop = True
- self._t.join()
- self._t = None
- def read(self):
- while not self._q.empty():
- yield self._q.get()
- def _main(self):
- while not self._stop:
- start_time = time.monotonic()
- self._read_cb()
- end_time = time.monotonic()
- remaining = self.interval + start_time - end_time
- if remaining > 0:
- time.sleep(remaining)
|