| EV documentation | Contained in the EV distribution. |
EV::MakeMaker - MakeMaker glue for the C-level EV API
This allows you to access some libevent functionality from other perl modules.
For optimal performance, hook into EV at the C-level. You'll need
to make changes to your Makefile.PL and add code to your xs /
c file(s).
use EV::MakeMaker qw(ev_args); # ... set up %args ... WriteMakefile (ev_args (%args));
#include "EVAPI.h"
BOOT:
I_EV_API ("YourModule");
See the EVAPI.h header, which you should include instead of ev.h.
In short, all the functions and macros from ev.h should work, except
that the trailing underscore macros (EV_A_, EV_DEFAULT_) are not
available (except EV_P_ :).
Multiplicity is enabled.
The data member in each watcher is of type SV * and not void *
(this might change at some point).
The EV::Glib, EV::ADNS and Glib::EV modules all give nice examples on how to use this module.
Here are some .xs fragments taken from EV::ADNS that should get you going:
#include "EVAPI.h"
static ev_prepare pw;
static ev_idle iw;
static void
idle_cb (EV_P_ ev_idle *w, int revents)
{
ev_idle_stop (EV_A, w);
}
MODULE = ...
BOOT:
{
I_EV_API ("EV::ADNS");
ev_prepare_init (&pw, prepare_cb);
ev_init (&iw, idle_cb); ev_set_priority (&iw, EV_MINPRI);
ev_idle_start (EV_DEFAULT, &iw);
}
| EV documentation | Contained in the EV distribution. |
package EV::MakeMaker; BEGIN { eval { require warnings } && warnings->unimport ("uninitialized") } use Config; use base 'Exporter'; @EXPORT_OK = qw(&ev_args $installsitearch); my %opt; for my $opt (split /:+/, $ENV{PERL_MM_OPT}) { my ($k,$v) = split /=/, $opt; $opt{$k} = $v; } my $extra = $Config{sitearch}; $extra =~ s/$Config{prefix}/$opt{PREFIX}/ if exists $opt{PREFIX}; for my $d ($extra, @INC) { if (-e "$d/EV/EVAPI.h") { $installsitearch = $d; last; } } sub ev_args { my %arg = @_; $arg{INC} .= " -I$installsitearch/EV -I$installsitearch"; %arg; } 1; __END__