|
NAMECoro::Event - do events the coro-way, with EventSYNOPSISuse Coro; use Coro::Event; sub keyboard : Coro { my $w = Coro::Event->io(fd => \*STDIN, poll => 'r'); while() { print "cmd> "; my $ev = $w->next; my $cmd = <STDIN>; unloop unless $cmd ne ""; print "data> "; my $ev = $w->next; my $data = <STDIN>; } } loop; # wait for input on stdin for one second Coro::Event::do_io (fd => \*STDIN, timeout => 1) & Event::Watcher::R or die "no input received"; # use a separate thread for event processing, if impossible in main: Coro::async { Event::loop }; DESCRIPTIONThis module enables you to create programs using the powerful Event model (and module), while retaining the linear style known from simple or threaded programs.This module provides a method and a function for every watcher type (flavour) (see Event). The only difference between these and the watcher constructors from Event is that you do not specify a callback function - it will be managed by this module. Your application should just create all necessary threads and then call "Event::loop". Please note that even programs or modules (such as Coro::Handle) that use "traditional" event-based/continuation style will run more efficient with this module then when using only Event. WARNINGPlease note that Event does not support multithreading. That means that you MUST NOT block in an event callback. Again: In Event callbacks, you must never ever call a Coro function that blocks the current thread.While this seems to work superficially, it will eventually cause memory corruption and often results in deadlocks. Best practise is to always use Coro::unblock_sub for your callbacks. SEMANTICSWhenever Event blocks (e.g. in a call to "one_event", "loop" etc.), this module cede's to all other threads with the same or higher priority. When any threads of lower priority are ready, it will not block but run one of them and then check for events.The effect is that coroutines with the same or higher priority than the blocking coroutine will keep Event from checking for events, while coroutines with lower priority are being run, but Event checks for new events after every cede. Note that for this to work you actually need to run the event loop in some thread. FUNCTIONS
AUTHOR/SUPPORT/CONTACTMarc A. Lehmann <schmorp@schmorp.de> http://software.schmorp.de/pkg/Coro.html
Visit the GSP FreeBSD Man Page Interface. |