- def __init__(self, sm):
- self._sm = sm
- self._t = ThreadRepeater(self._wake, 0.5)
+ def __init__(self):
+ self._tobewokens = []
+ self._tobewokens_lock = Lock()
+ self._t = ThreadRepeater(self._wake, SLEEP_TIME, name="Waker")
+
+ def register(self, f, time, one_shot = False):
+ '''Register a function which is called approximately every <time> seconds (or just once, if one_shot is True). f should return quickly, or it will delay the waker!'''
+ time = max(time//SLEEP_TIME, 1)
+ with self._tobewokens_lock:
+ self._tobewokens.append(ToBeWoken(f, time, one_shot))