__exec_th als daemon starten

Devices zum autorefresh hinzufügen abgesichert mit Lock
This commit is contained in:
2017-12-03 15:00:47 +01:00
parent 691bbee0bc
commit 35a10fc53e
4 changed files with 14 additions and 4 deletions

View File

@@ -284,7 +284,10 @@ class Device(object):
self._filelock.release()
self._selfupdate = True
self._modio._lst_refresh.append(self)
# Sicher in Liste einfügen
with self._modio._imgwriter.lck_refresh:
self._modio._lst_refresh.append(self)
# Thread starten, wenn er noch nicht läuft
if not self._modio._imgwriter.is_alive():

View File

@@ -373,7 +373,7 @@ class ProcimgWriter(Thread):
dev._ba_datacp = dev._ba_devdata[:]
def __exec_th(self):
"""Fuehrt Events aus, die als Thread registriert wurden."""
"""Laeuft als Thread, der Events als Thread startet."""
while self.__eventwork:
try:
tup_fireth = self.__eventqth.get(timeout=1)
@@ -400,6 +400,7 @@ class ProcimgWriter(Thread):
# Threadmanagement
if value and not self.__eventth.is_alive():
self.__eventth = Thread(target=self.__exec_th)
self.__eventth.daemon = True
self.__eventth.start()
def _get_ioerrors(self):

View File

@@ -414,12 +414,18 @@ class RevPiModIO(object):
@param full Entfernt auch alle Devices aus autorefresh"""
self._exit.set()
self._waitexit.set()
if full:
# ProcimgWriter beenden und darauf warten
if self._imgwriter is not None and self._imgwriter.is_alive():
self._imgwriter.stop()
self._imgwriter.join(self._imgwriter._refresh)
# Mainloop beenden und darauf waretn
if self._th_mainloop is not None and self._th_mainloop.is_alive():
self._th_mainloop.join(1)
# Alle Devices aus Autorefresh entfernen
while len(self._lst_refresh) > 0:
dev = self._lst_refresh.pop()
dev._selfupdate = False