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
> 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.
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