From 7f61bc3d979ef53b867172664694f8fcf9e5bdd0 Mon Sep 17 00:00:00 2001
From: root
#include <ev++.h>-
(it is not installed by default). This automatically includes ev.h
-and puts all of its definitions (many of them macros) into the global
-namespace. All C++ specific things are put into the ev namespace.
It should support all the same embedding options as ev.h, most notably
-EV_MULTIPLICITY.
This automatically includes ev.h and puts all of its definitions (many
+of them macros) into the global namespace. All C++ specific things are
+put into the ev namespace. It should support all the same embedding
+options as ev.h, most notably EV_MULTIPLICITY.
Care has been taken to keep the overhead low. The only data member added
+to the C-style watchers is the event loop the watcher is associated with
+(or no additional members at all if you disable EV_MULTIPLICITY when
+embedding libev).
Currently, functions and static and non-static member functions can be +used as callbacks. Other types should be easy to add as long as they only +need one additional pointer for context. If you need support for other +types of functors please contact the author (preferably after implementing +it).
Here is a list of things available in the ev namespace:
ev::READ, ev::WRITE etc.All of those classes have these methods:
The constructor takes a pointer to an object and a method pointer to
-the event handler callback to call in this class. The constructor calls
-ev_init for you, which means you have to call the set method
-before starting it. If you do not specify a loop then the constructor
-automatically associates the default loop with this watcher.
The constructor (optionally) takes an event loop to associate the watcher
+with. If it is omitted, it will use EV_DEFAULT.
The constructor calls ev_init for you, which means you have to call the
+set method before starting it.
It will not set a callback, however: You have to call the templated set
+method to set a callback before you can start the watcher.
(The reason why you have to use a method is a limitation in C++ which does +not allow explicit template arguments for constructors).
The destructor automatically stops the watcher if it is active.
This method sets the callback method to call. The method has to have a
+signature of void (*)(ev_TYPE &, int), it receives the watcher as
+first argument and the revents as second. The object must be given as
+parameter and is stored in the data member of the watcher.
This method synthesizes efficient thunking code to call your method from
+the C callback that libev requires. If your compiler can inline your
+callback (i.e. it is visible to it at the place of the set call and
+your compiler is good :), then the method will be fully inlined into the
+thunking function, making it as fast as a direct C callback.
Example: simple class declaration and watcher initialisation
+ struct myclass
+ {
+ void io_cb (ev::io &w, int revents) { }
+ }
+
+ myclass obj;
+ ev::io iow;
+ iow.set <myclass, &myclass::io_cb> (&obj);
+
+
+ Also sets a callback, but uses a static method or plain function as
+callback. The optional data argument will be stored in the watcher's
+data member and is free for you to use.
See the method-set above for more details.
Associates a different struct ev_loop with this watcher. You can only
@@ -1782,13 +1823,14 @@ do this when the watcher is inactive (and not pending either).
Basically the same as ev_TYPE_set, with the same args. Must be
-called at least once. Unlike the C counterpart, an active watcher gets
-automatically stopped and restarted.
Starts the watcher. Note that there is no loop argument as the
-constructor already takes the loop.
Starts the watcher. Note that there is no loop argument, as the
+constructor already stores the event loop.