- 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
|
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()
|
||||||
|
|||||||
Reference in New Issue
Block a user