- Timer: implemented stop()

- Timer: added iteration count

git-svn-id: http://moon:8086/svn/projects/HendiControl@254 fda53097-d464-4ada-af97-ba876c37ca34
This commit is contained in:
2019-04-23 08:56:22 +00:00
parent e2543b39ad
commit 7546df5f2b
+19 -6
View File
@@ -2,23 +2,26 @@ import time
import abc
class Timer(object):
def __init__(self, name='Timer', listener=None, mode='periodic'):
def __init__(self, name='Timer', listener=None):
self.name = name
self.listener = listener
self.isActive = False
self.mode = 'periodic'
self.interval = 0
self.elapseTime = 0
self.count = 0
self.cancel = False
def start(self, interval):
def start(self, interval, mode='periodic'):
now = time.time()
self.interval = interval
self.mode = mode
self.elapseTime = now + interval
self.isActive = self.elapseTime > now
pass
def stop(self):
pass
self.cancel = True
def __str__(self):
return self.name
@@ -44,12 +47,17 @@ class TimerManager(object):
now = time.time()
if timer.isActive:
if timer.elapseTime <= now:
if timer.listener:
if timer.cancel:
timer.isActive = False
timer.count = 0
elif timer.listener:
if 'periodic' in timer.mode:
timer.start(timer.interval)
timer.listener.onTimer(timer)
timer.count += 1
def getMinTimeout(self):
minTimeout = None
timeouts = []
for timer in self.timers:
now = time.time()
@@ -57,8 +65,9 @@ class TimerManager(object):
timeout = max(0, timer.elapseTime-now)
timeouts.append(timeout)
if len(timeouts) > 0:
minTimeout = min(timeouts)
minTimeout = min(timeouts)
return minTimeout
if __name__ == '__main__':
@@ -78,11 +87,15 @@ if __name__ == '__main__':
pass
def onTimer(self, timer):
print (timer)
print ("{}, Count: {}".format(timer, timer.count))
if timer.count == 30:
timer.stop()
def run(self):
while(True):
wait = self.timerMgr.getMinTimeout()
if wait is None:
break
time.sleep(wait)
self.timerMgr.process()