Wikieintrag zu Blocking.pm

Begonnen von Markus Bloch, 28 Juni 2013, 00:01:13

Vorheriges Thema - Nächstes Thema

Markus Bloch

Hallo zusammen,

als einer der Intensivnutzer des Moduls Blocking.pm habe ich mal meine Erfahrungen und Best Practices in einem Wiki-Artikel niedergeschrieben.

Evtl. hat jemand noch Ergänzungen oder Anregungen dafür. Immer her damit.

http://www.fhemwiki.de/wiki/Blocking_Call

Viele Grüße

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

> Da aber bei einem BlockingCall ein Parrallelprozess gestartet wird sind diese Zeiger nicht mehr nutzbar.

Habs gerade getestet, $hash kann man uebergeben.
fork() dupliziert den Adressraum, d.h. alle alten Variablen sollten ihre Gueltigkeit behalten.
Unter Windows wird mWn bei dem perl-fork() ein thread gestartet, da sollte das also auch gelten.

Man kann statt einem konkatenierten String auch einen Zeiger auf einem %hash uebergeben, so in der Art:
BlockingCall("DoSleep", { TimeOut=>3, mode=>"FastSleep", ... }, "SleepDone", 8, "AbortFn", "AbortArg");

da spart man sich den split in DoSleep(). Die Rueckgabe funktioniert so natuerlich nicht, man kann also aus diesem Grund den Aufrufparameter doch mit einem konkatenierten String bauen.

Markus Bloch

Hi Rudi,

bei den Argumenten für die BlockingFn hast du natürlich recht. Das hab ich eher aus Faulheit in meinen Modulen so umgesetzt.

Diese Aussage bezieht sich eher auf den Return-Wert der BlockinFn. Hier kann man ja nur einen Returnwert in Form eines Strings (oder einer Zahl) verwenden. Eine Arraystruktur oder Hash-Struktur kann hier ja nicht verwendet werden, genauso wenig wie ein Zeiger.

Ich kann das aber gerne noch einmal aufnehmen.

Viele Grüße

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)