- 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:
+19
-6
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user