GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
MakeMaker(3) User Contributed Perl Documentation MakeMaker(3)

Coro::MakeMaker - MakeMaker glue for the XS-level Coro API

This allows you to control coroutines from C/XS.

For optimal performance, hook into Coro at the C-level. You'll need to make changes to your "Makefile.PL" and add code to your "xs" / "c" file(s).

When you hook in at the C-level you can get a huge performance gain, but you also reduce the chances that your code will work unmodified with newer versions of "perl" or "Coro". This may or may not be a problem. Just be aware, and set your expectations accordingly.

  use Coro::MakeMaker qw(coro_args);

  # ... set up %args ...

  WriteMakefile (coro_args (%args));

  #include "CoroAPI.h"

  BOOT:
    I_CORO_API ("YourModule");

This is just a small overview - read the Coro/CoroAPI.h header file in the distribution, and check the examples in EV/ and Event/*, or as a more real-world example, the Deliantra game server (which uses Coro::MakeMaker).

You can also drop me a mail if you run into any trouble.

 #define CORO_TRANSFER(prev,next) /* transfer from prev to next */
 #define CORO_SCHEDULE            /* like Coro::schedule */
 #define CORO_CEDE                /* like Coro::cede */
 #define CORO_CEDE_NOTSELF        /* like Coro::cede_notself */
 #define CORO_READY(coro)         /* like $coro->ready */
 #define CORO_IS_READY(coro)      /* like $coro->is_ready */
 #define CORO_NREADY              /* # of procs in ready queue */
 #define CORO_CURRENT             /* returns $Coro::current */
 #define CORO_THROW               /* exception pending? */
 #define CORO_READYHOOK           /* hook for event libs, see Coro::EV */

 /* C-level coroutine struct, opaque, not used much */
 struct coro;

 /* used for schedule-like-function prepares */
 struct coro_transfer_args
 {
   struct coro *prev, *next;
 };

 /* this is the per-perl-coro slf frame info */
 struct CoroSLF
 {
   void (*prepare) (pTHX_ struct coro_transfer_args *ta); /* 0 means not yet initialised */
   int (*check) (pTHX_ struct CoroSLF *frame);
   void *data; /* for use by prepare/check/destroy */
   void (*destroy) (pTHX_ struct CoroSLF *frame);
 };

 /* needs to fill in the *frame */
 typedef void (*coro_slf_cb) (pTHX_ struct CoroSLF *frame, CV *cv, SV **arg, int items);

 #define CORO_SV_STATE(coro)      /* returns the internal struct coro * */
 #define CORO_EXECUTE_SLF(cv,init,ax) /* execute a schedule-like function */
 #define CORO_EXECUTE_SLF_XS(init) /* SLF in XS, see e.g. Coro::EV */

 /* called on enter/leave */
 typedef void (*coro_enterleave_hook) (pTHX_ void *arg);

 #define CORO_ENTERLEAVE_HOOK(coro,enter,enter_arg,leave,leave_arg)   /* install an XS-level enter/leave hook */
 #define CORO_ENTERLEAVE_UNHOOK(coro,enter,leave)                     /* remove an XS-level enter/leave hook */
 #define CORO_ENTERLEAVE_SCOPE_HOOK(enter,enter_arg,leave,leave_arg)  /* install an XS-level enter/leave hook for the corrent scope */

   Marc A. Lehmann <schmorp@schmorp.de>
   http://software.schmorp.de/pkg/Coro.html
2020-07-29 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.