- 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 import abc
class Timer(object): class Timer(object):
def __init__(self, name='Timer', listener=None, mode='periodic'): def __init__(self, name='Timer', listener=None):
self.name = name self.name = name
self.listener = listener self.listener = listener
self.isActive = False self.isActive = False
self.mode = 'periodic' self.mode = 'periodic'
self.interval = 0 self.interval = 0
self.elapseTime = 0 self.elapseTime = 0
self.count = 0
self.cancel = False
def start(self, interval): def start(self, interval, mode='periodic'):
now = time.time() now = time.time()
self.interval = interval self.interval = interval
self.mode = mode
self.elapseTime = now + interval self.elapseTime = now + interval
self.isActive = self.elapseTime > now self.isActive = self.elapseTime > now
pass pass
def stop(self): def stop(self):
pass self.cancel = True
def __str__(self): def __str__(self):
return self.name return self.name
@@ -44,12 +47,17 @@ class TimerManager(object):
now = time.time() now = time.time()
if timer.isActive: if timer.isActive:
if timer.elapseTime <= now: if timer.elapseTime <= now:
if timer.listener: if timer.cancel:
timer.isActive = False
timer.count = 0
elif timer.listener:
if 'periodic' in timer.mode: if 'periodic' in timer.mode:
timer.start(timer.interval) timer.start(timer.interval)
timer.listener.onTimer(timer) timer.listener.onTimer(timer)
timer.count += 1
def getMinTimeout(self): def getMinTimeout(self):
minTimeout = None
timeouts = [] timeouts = []
for timer in self.timers: for timer in self.timers:
now = time.time() now = time.time()
@@ -57,8 +65,9 @@ class TimerManager(object):
timeout = max(0, timer.elapseTime-now) timeout = max(0, timer.elapseTime-now)
timeouts.append(timeout) timeouts.append(timeout)
if len(timeouts) > 0:
minTimeout = min(timeouts)
minTimeout = min(timeouts)
return minTimeout return minTimeout
if __name__ == '__main__': if __name__ == '__main__':
@@ -78,11 +87,15 @@ if __name__ == '__main__':
pass pass
def onTimer(self, timer): def onTimer(self, timer):
print (timer) print ("{}, Count: {}".format(timer, timer.count))
if timer.count == 30:
timer.stop()
def run(self): def run(self):
while(True): while(True):
wait = self.timerMgr.getMinTimeout() wait = self.timerMgr.getMinTimeout()
if wait is None:
break
time.sleep(wait) time.sleep(wait)
self.timerMgr.process() self.timerMgr.process()