FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: Markus Bloch am 28 Juni 2013, 00:01:13

Titel: Wikieintrag zu Blocking.pm
Beitrag von: Markus Bloch am 28 Juni 2013, 00:01:13
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 (//www.fhemwiki.de/wiki/Blocking_Call)

Viele Grüße

Markus
Titel: Aw: Wikieintrag zu Blocking.pm
Beitrag von: rudolfkoenig am 28 Juni 2013, 09:30:17
> 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.
Titel: Aw: Wikieintrag zu Blocking.pm
Beitrag von: Markus Bloch am 28 Juni 2013, 10:36:55
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