Blocking.pm - hinzufügen einer "TimeoutFn"

Begonnen von Markus Bloch, 21 März 2013, 22:26:47

Vorheriges Thema - Nächstes Thema

Markus Bloch

Hallo rudi,

in dem Thread Link wurde ich darauf Aufmerksam gemacht, dass wenn die BlockingFn aufgrund einer Timeout-Überschreitung gekillt wird, dass dann die FinishFn in einem solchen Fall nicht aufgerufen wird.

Dies ist bei PRESENCE aber essentiell, da ich mit der FinishFn den nächsten Durchlauf via InternalTimer schedule. Dies ist wichtig um sicherzustellen, dass erst nach dem beenden eines Threads ein neuer erzeugt wird und so immer nur ein Thread laufen kann. Damit wird ein aufschaukeln von gleichzeitigen Child-Prozessen verhindert.

Daher würde ich folgende Möglichkeiten anbieten:

1. Möglichkeit

Zitat von: Mattias schrieb am Di, 19 März 2013 20:41Vorschlag: BlockingCall um einen (optionalen) Parameter erweitert werden sollte. Diese "OnTimeout"-Funktion sollte im Timeout-Fall, nach dem Kill des Befehls, aufgerufen werden. Presence könnte so sicherstellen, dass die Überprüfung fortgesetzt wird oder eine verständliche Logmeldung ausgeben.

2. Möglichkeit

Sofern eine FinishFn gesetzt ist, diese in so einem Fall mit undef als Argument aufrufen.

Währe super, wenn wir diesen Fall so umsetzen können, damit ich auch in einem solchen Fall sichergehen kann, dass ein nächster Durchgang gescheduled wird.

Vielen Dank

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig

Eingecheckt, so wie Du es in Moeglichket 2 beschrieben hast.