Event
view release on metacpan or search on metacpan
c/typemap.c view on Meta::CPAN
src->mysv = wrap_genericsrc(src, pe_genericsrc_stash, 0);
}
return SvREFCNT_inc(sv_2mortal(src->mysv));
}
static void* sv_2genericsrc(SV *sv) {
return sv_2thing(MG_GENERICSRC_CODE, sv);
}
/*
Events have a short lifetime. mysv is kept alive until the event
has been serviced. Once perl finally releases mysv then the event
is deallocated (or, more likely, recycled).
*/
SV *event_2sv(pe_event *ev) { /**MAKE FAST**/
if (!ev->mysv) {
SV *rv = newSV(0);
SV *sv = newSVrv(rv,0);
sv_bless(rv, ev->vtbl->stash);
sv_setiv(sv, PTR2IV(ev));
demo/readline.t view on Meta::CPAN
# store output buffer in a scalar (for print)
my $outstream=$attribs->{'outstream'};
# install STDIN handler
Event->io(
desc => 'STDIN handler', # description;
fd => \*STDIN, # handle;
poll => 'r', # wait for income;
cb => sub {&{$attribs->{'callback_read_char'}}()}, # callback;
repeat => 1, # keep alive after events;
);
# install an additional idle task just to demonstrate that the loop works fine, if necessary
Event->idle(
desc => 'idle task', # description;
prio => 5, # low priority;
min => 1, # minimal pending time in seconds;
max => 5, # invoked after at least this number of seconds;
cb => sub {print $outstream "\n\n[Trace] Idle task is running.\n\n"}, # callback;
repeat => 1, # keep alive after events;
) if exists $options{'idle'};
# enter event loop
Event::loop();
# handle a line completely read
sub processLine
{
# get line
( run in 0.927 second using v1.01-cache-2.11-cpan-483215c6ad5 )