-
-
29 Apr 2021 18:14:31 UTC
- Distribution: Event
- Source (raw)
- Browse (raw)
- Changes
- How to Contribute
- Repository
- Issues
- Testers (331 / 0 / 0)
- Kwalitee
Bus factor: 1- 69.36% Coverage
- License: perl_5
- Perl: v5.8.0
- Activity
24 month- Tools
- Download (250.62KB)
- MetaCPAN Explorer
- Permissions
- Subscribe to distribution
- Permalinks
- This version
- Latest version
- Dependencies
- none
- Reverse dependencies
- CPAN Testers List
- Dependency graph
NAME
Event::MakeMaker - MakeMaker glue for the C-level Event API
SYNOPSIS
This is an advanced feature of Event.
DESCRIPTION
For optimal performance, hook into Event at the C-level. You'll need to make changes to your
Makefile.PL
and add code to yourxs
/c
file(s).WARNING
When you hook in at the C-level you get a huge performance gain, but you also reduce the chances that your code will work unmodified with newer versions of
perl
orEvent
. This may or may not be a problem. Just be aware, and set your expectations accordingly.HOW TO
Makefile.PL
use Event::MakeMaker qw(event_args); # ... set up %args ... WriteMakefile(event_args(%args));
XS
#include "EventAPI.h" BOOT: I_EVENT_API("YourModule");
API (v21)
struct EventAPI { I32 Ver; /* EVENTS */ void (*queue )(pe_event *ev); void (*start )(pe_watcher *ev, int repeat); void (*now )(pe_watcher *ev); void (*stop )(pe_watcher *ev, int cancel_events); void (*cancel )(pe_watcher *ev); void (*suspend )(pe_watcher *ev); void (*resume )(pe_watcher *ev); /* All constructors optionally take a stash and template. Either or both can be NULL. The template should not be a reference. */ pe_idle *(*new_idle )(HV*, SV*); pe_timer *(*new_timer )(HV*, SV*); pe_io *(*new_io )(HV*, SV*); pe_var *(*new_var )(HV*, SV*); pe_signal *(*new_signal)(HV*, SV*); /* TIMEABLE */ void (*tstart)(pe_timeable *); void (*tstop)(pe_timeable *); /* HOOKS */ pe_qcallback *(*add_hook)(char *which, void *cb, void *ext_data); void (*cancel_hook)(pe_qcallback *qcb); /* STATS */ void (*install_stats)(pe_event_stats_vtbl *esvtbl); void (*collect_stats)(int yes); pe_ring *AllWatchers; /* TYPEMAP */ SV *(*watcher_2sv)(pe_watcher *wa); void *(*sv_2watcher)(SV *sv); SV *(*event_2sv)(pe_event *ev); void *(*sv_2event)(SV *sv); };
EXAMPLE
static pe_io *X11_ev=0; static void x_server_dispatch(void *ext_data) { ... } if (!X11_ev) { X11_ev = GEventAPI->new_io(0,0); X11_ev->poll = PE_R; sv_setpv(X11_ev->base.desc, "X::Server"); X11_ev->base.callback = (void*) x_server_dispatch; X11_ev->base.ext_data = <whatever>; X11_ev->base.prio = PE_PRIO_NORMAL; } X11_ev->fd = x_fd; GEventAPI->resume((pe_event*) X11_ev); GEventAPI->start((pe_event*) X11_ev, 0);
BUT I NEED A NEW TYPE OF WATCHER FOR MY INTERGALACTIC INFEROMETER
I'd prefer not to export the entire Event.h apparatus in favor of minimizing interdependencies. If you really, really need to create a new type of watcher send your problem analysis to the mailing list!
Module Install Instructions
To install Event, copy and paste the appropriate command in to your terminal.
cpanm Event
perl -MCPAN -e shell install Event
For more information on module installation, please visit the detailed CPAN module installation guide.