Frage

Ich habe ein FileHandle-Objekt, das somit erstellt wird (leicht für Klarheit bearbeitet):

generasacodicetagpre.

Ich möchte dies mit AnyEvent verwenden.Es funktioniert gut mit AnyEvent::Impl::Perl schlägt jedoch nicht mit AnyEvent::Impl::EV .Ich denke, dass ich es auf diese Methode von EV nachverfolgt habe:

generasacodicetagpre.

Ich denke, es versagt den generationspflichtigen Testcode-Test.Verwenden SvTYPE (fh) == SVt_PVGV 's dump () Methode Ich bekomme:

generasacodicetagpre.

Jede Hilfe, wie ich die Erstellung meines Griffs so anpassen könnte, dass er diesen Test passieren kann, würde erkennen.

War es hilfreich?

Lösung

Tied File-Griffe werden nur teilweise in Perl implementiert und funktionieren nicht mit eV. Gebundene Griffe können nicht gemacht werden, um mit einer Ereignisbibliothek in zusammenzuarbeiten Allgemein: Während einige spezifische Fälle funktionieren könnten, in den meisten Fällen, in denen gefesselt Griffe werden verwendet, sie können nicht arbeiten, weil die Bereitschaftsbenachrichtigung von einem Der zugrunde liegende Dateideskriptor bezieht sich nicht auf Bereitschaftsbenachrichtigungen von der gebundene Griff.

Wenn Ihr Ziel ist, lediglich ein Ding-Wrapper um eine echte Datei zu haben Deskriptor, dann ist es eine Möglichkeit, es zu kopieren, was io :: Griff und / oder FileHandle dient (sehr hässlich, aber der einzige Weg, der in Perl funktioniert) oder verwenden sie als Basisklassen. Dies erlaubt Ihnen nicht, interessante Dinge zu tun wie das Haken liest und schreibt, aber die Chancen hängen, sie macht sie nicht kompatibel mit Ereignisbibliotheken.

Eine andere Möglichkeit besteht darin, eine Perlio-Ebene (Perlio :: via) zu implementieren. In meinem Erfahrung, dieses Modul ist etwas zerbrechlich, gibt Ihnen aber alle Optionen. Wieder, wenn Sie die Pufferung oder interessantere Dinge einführen, die Entkoppeln Sie den File-Deskriptor von der eigentlichen E / A, dann kann er nicht gemacht werden Arbeit.

Schließlich, wenn Sie einen neuen Grifftyp hinzufügen möchten, können Sie erstellen ein neuer Beobachtertyp. Dies kann so einfach sein wie eine Funktion my_handle_io_watcher, das deinen Griff nimmt, prüft die Bereitschaft und Erzeugt die Art von Low-Level-Watcher, der erforderlich ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top