Skip to content
Snippets Groups Projects
Commit a5b8329c authored by jkerdreu's avatar jkerdreu
Browse files

Added timer repeat (sometimes, you don't want timer to repeat..)

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/trunk@1867 b32b6428-25c9-4566-ad07-03861ab6144f
parent 58b25521
Branches
Tags
No related merge requests found
......@@ -239,19 +239,21 @@ class Engine(object):
#####################################################
# timers
#####################################################
def add_timer(self,func,period):
t = Timer(func,period)
def add_timer(self,func,period,repeat=-1):
t = Timer(func,period,repeat)
self.timers.append(t)
def remove_timer(self,timer):
self.timers.remove(timer)
def process_timers(self):
expire_list = []
if len(self.timers)!=0 :
now = time.time()
# little hack to avoid to check timer to often.
# w/ this enable timer precision is bad, but far enougth
if (now - self.__last_timer) < 0.5: return
if (now - self.__last_timer) < 0.4: return
for t in self.timers:
if t.deadline < now:
......@@ -259,7 +261,15 @@ class Engine(object):
t.func()
except CallbackError as e:
logger.error(e.description)
if (t.repeat != -1):
t.repeat = t.repeat-1
if t.repeat == 0:
expire_list.append(t)
t.deadline = now + t.period
# delete expired timers
for t in expire_list:
self.remove_timer(t)
self.__last_timer = now
#####################################################
......@@ -382,7 +392,9 @@ def get_args_method(method):
class Timer(object):
def __init__(self,func,period):
def __init__(self,func,period,repeat):
self.func = func
self.period = period
self.repeat = repeat
self.deadline = 0
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment