mirror of
https://github.com/PiBrewing/craftbeerpi4.git
synced 2024-12-22 21:44:57 +01:00
Fix to improve accuracy of timer
Timer was not accurate as it was depending on the asyncio.sleep function which is most liklely not exactly one second depending on other functions running in parallel. Now the timer is comparable to cbpi3 where it runs until an end time is reached. This is to address issue #66 and has been tested
This commit is contained in:
parent
5cb0ce76de
commit
28f4113f2f
1 changed files with 8 additions and 6 deletions
|
@ -13,27 +13,29 @@ class Timer(object):
|
|||
self._callback = on_done
|
||||
self._update = on_update
|
||||
self.start_time = None
|
||||
self.end_time = None
|
||||
|
||||
def done(self, task):
|
||||
if self._callback is not None:
|
||||
asyncio.create_task(self._callback(self))
|
||||
|
||||
async def _job(self):
|
||||
self.start_time = time.time()
|
||||
self.count = int(round(self._timemout, 0))
|
||||
self.start_time = int(time.time())
|
||||
self.end_time = self.start_time + int(round(self._timemout, 0))
|
||||
self.count = self.end_time - self.start_time
|
||||
try:
|
||||
while self.count > 0:
|
||||
self.count -= 1
|
||||
self.count = (self.end_time - int(time.time()))
|
||||
if self._update is not None:
|
||||
await self._update(self,self.count)
|
||||
await asyncio.sleep(1)
|
||||
except asyncio.CancelledError:
|
||||
end = time.time()
|
||||
end = int(time.time())
|
||||
duration = end - self.start_time
|
||||
self._timemout = self._timemout - duration
|
||||
|
||||
async def add(self, seconds):
|
||||
self.count = self.count + seconds
|
||||
self.end_time = self.end_time + seconds
|
||||
|
||||
def start(self):
|
||||
self._task = asyncio.create_task(self._job())
|
||||
|
@ -66,4 +68,4 @@ class Timer(object):
|
|||
seconds = time % 60
|
||||
minutes = math.floor(time / 60) % 60
|
||||
hours = math.floor(time / 3600)
|
||||
return pattern.format(hours, minutes, seconds)
|
||||
return pattern.format(hours, minutes, seconds)
|
||||
|
|
Loading…
Reference in a new issue