mirror of
https://github.com/naruxde/revpimodio2.git
synced 2025-11-08 22:03:53 +01:00
Add blocking parameter to .cycleloop
If you want to use a cycleloop function and your own tasks, you can set blocking=False in .cycleloop(...) call. Same as .mainloop(...) call.
This commit is contained in:
@@ -4,6 +4,7 @@ import queue
|
|||||||
import warnings
|
import warnings
|
||||||
from math import ceil
|
from math import ceil
|
||||||
from threading import Event, Lock, Thread
|
from threading import Event, Lock, Thread
|
||||||
|
from time import sleep
|
||||||
from timeit import default_timer
|
from timeit import default_timer
|
||||||
|
|
||||||
from revpimodio2 import BOTH, FALLING, RISING
|
from revpimodio2 import BOTH, FALLING, RISING
|
||||||
@@ -602,8 +603,8 @@ class ProcimgWriter(Thread):
|
|||||||
self._eventq.put(tup_fire, False)
|
self._eventq.put(tup_fire, False)
|
||||||
del self.__dict_delay[tup_fire]
|
del self.__dict_delay[tup_fire]
|
||||||
|
|
||||||
# Refresh abwarten
|
# Sleep and not .wait (.wait uses system clock)
|
||||||
self._work.wait(self._adjwait)
|
sleep(self._adjwait)
|
||||||
|
|
||||||
# Wartezeit anpassen um echte self._refresh zu erreichen
|
# Wartezeit anpassen um echte self._refresh zu erreichen
|
||||||
mrk_dt = default_timer()
|
mrk_dt = default_timer()
|
||||||
|
|||||||
@@ -678,7 +678,7 @@ class RevPiModIO(object):
|
|||||||
self._exit_level |= 2
|
self._exit_level |= 2
|
||||||
self.exit(full=True)
|
self.exit(full=True)
|
||||||
|
|
||||||
def cycleloop(self, func, cycletime=50):
|
def cycleloop(self, func, cycletime=50, blocking=True):
|
||||||
"""
|
"""
|
||||||
Startet den Cycleloop.
|
Startet den Cycleloop.
|
||||||
|
|
||||||
@@ -705,6 +705,7 @@ class RevPiModIO(object):
|
|||||||
|
|
||||||
:param func: Funktion, die ausgefuehrt werden soll
|
:param func: Funktion, die ausgefuehrt werden soll
|
||||||
:param cycletime: Zykluszeit in Millisekunden - Standardwert 50 ms
|
:param cycletime: Zykluszeit in Millisekunden - Standardwert 50 ms
|
||||||
|
:param blocking: Wenn False, blockiert das Programm hier NICHT
|
||||||
:return: None or the return value of the cycle function
|
:return: None or the return value of the cycle function
|
||||||
"""
|
"""
|
||||||
# Prüfen ob ein Loop bereits läuft
|
# Prüfen ob ein Loop bereits läuft
|
||||||
@@ -726,6 +727,16 @@ class RevPiModIO(object):
|
|||||||
"registered function '{0}' ist not callable".format(func)
|
"registered function '{0}' ist not callable".format(func)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Thread erstellen, wenn nicht blockieren soll
|
||||||
|
if not blocking:
|
||||||
|
self._th_mainloop = Thread(
|
||||||
|
target=self.cycleloop,
|
||||||
|
args=(func,),
|
||||||
|
kwargs={"cycletime": cycletime, "blocking": True}
|
||||||
|
)
|
||||||
|
self._th_mainloop.start()
|
||||||
|
return
|
||||||
|
|
||||||
# Zykluszeit übernehmen
|
# Zykluszeit übernehmen
|
||||||
old_cycletime = self._imgwriter.refresh
|
old_cycletime = self._imgwriter.refresh
|
||||||
if not cycletime == self._imgwriter.refresh:
|
if not cycletime == self._imgwriter.refresh:
|
||||||
@@ -777,11 +788,13 @@ class RevPiModIO(object):
|
|||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
if self._imgwriter.lck_refresh.locked():
|
if self._imgwriter.lck_refresh.locked():
|
||||||
self._imgwriter.lck_refresh.release()
|
self._imgwriter.lck_refresh.release()
|
||||||
|
if self._th_mainloop is None:
|
||||||
self.exit(full=False)
|
self.exit(full=False)
|
||||||
e = ex
|
e = ex
|
||||||
finally:
|
finally:
|
||||||
# Cycleloop beenden
|
# Cycleloop beenden
|
||||||
self._looprunning = False
|
self._looprunning = False
|
||||||
|
self._th_mainloop = None
|
||||||
|
|
||||||
# Alte autorefresh Zeit setzen
|
# Alte autorefresh Zeit setzen
|
||||||
self._imgwriter.refresh = old_cycletime
|
self._imgwriter.refresh = old_cycletime
|
||||||
|
|||||||
Reference in New Issue
Block a user