1
0
mirror of https://github.com/JoelBender/bacpypes synced 2025-10-27 00:57:47 +08:00

offset assignment bug, working around floating point issues, added tests

This commit is contained in:
Joel Bender
2017-09-09 22:56:17 -04:00
parent 2bacc00e33
commit a050df73a6
5 changed files with 101 additions and 33 deletions

View File

@@ -183,7 +183,8 @@ class RecurringTask(_Task):
if interval is not None:
self.taskInterval = interval
if offset is not None:
self.taskIntervalOffset = interval
self.taskIntervalOffset = offset
if self.taskInterval is None:
raise RuntimeError("interval unset, use ctor or install_task parameter")
if self.taskInterval <= 0.0:
@@ -195,15 +196,18 @@ class RecurringTask(_Task):
_unscheduled_tasks.append(self)
else:
# offset is also in milliseconds to be consistent
# get ready for the next interval plus a jitter
now = _task_manager.get_time() + 0.000001
# interval and offset are in milliseconds to be consistent
interval = self.taskInterval / 1000.0
if self.taskIntervalOffset:
offset = self.taskIntervalOffset / 1000.0
else:
offset = 0.0
if _debug: RecurringTask._debug(" - now, interval, offset: %r, %r, %r", now, interval, offset)
# get ready for the next interval (aligned)
now = _task_manager.get_time()
interval = self.taskInterval / 1000.0
# compute the time
self.taskTime = (now - offset) + interval - ((now - offset) % interval) + offset
if _debug: RecurringTask._debug(" - task time: %r", self.taskTime)