diff options
| author | root <root> | 2007-11-24 09:48:37 +0000 | 
|---|---|---|
| committer | root <root> | 2007-11-24 09:48:37 +0000 | 
| commit | 73ce65a9122dd90fac253802fe20630572fdd4be (patch) | |
| tree | 528ab63edb8fbdd24f6dcc79d9a3317b116a96ee /ev.html | |
| parent | fceede5e717d0ff3379711c0e76d22a4a6052971 (diff) | |
document c++ api
Diffstat (limited to 'ev.html')
| -rw-r--r-- | ev.html | 101 | 
1 files changed, 97 insertions, 4 deletions
| @@ -6,7 +6,7 @@  	<meta name="description" content="Pod documentation for libev" />  	<meta name="inputfile" content="<standard input>" />  	<meta name="outputfile" content="<standard output>" /> -	<meta name="created" content="Sat Nov 24 08:20:38 2007" /> +	<meta name="created" content="Sat Nov 24 10:48:32 2007" />  	<meta name="generator" content="Pod::Xhtml 1.57" />  <link rel="stylesheet" href="http://res.tst.eu/pod.css"/></head>  <body> @@ -879,8 +879,8 @@ inactivity.</p>  <p>Unlike <code>ev_timer</code>'s, they are not based on real time (or relative time)  but on wallclock time (absolute time). You can tell a periodic watcher  to trigger "at" some specific point in time. For example, if you tell a -periodic watcher to trigger in 10 seconds (by specifiying e.g. c<ev_now () -+ 10.>) and then reset your system clock to the last year, then it will +periodic watcher to trigger in 10 seconds (by specifiying e.g. <code>ev_now () ++ 10.</code>) and then reset your system clock to the last year, then it will  take a year to trigger the event (unlike an <code>ev_timer</code>, which would trigger  roughly 10 seconds later and of course not if you reset your system time  again).</p> @@ -1308,7 +1308,100 @@ to use the libev header file and library.</dt>  </div>  <h1 id="C_SUPPORT">C++ SUPPORT</h1><p><a href="#TOP" class="toplink">Top</a></p>  <div id="C_SUPPORT_CONTENT"> -<p>TBD.</p> +<p>Libev comes with some simplistic wrapper classes for C++ that mainly allow +you to use some convinience methods to start/stop watchers and also change +the callback model to a model using method callbacks on objects.</p> +<p>To use it,</p> +<pre>  #include <ev++.h> + +</pre> +<p>(it is not installed by default). This automatically includes <cite>ev.h</cite> +and puts all of its definitions (many of them macros) into the global +namespace. All C++ specific things are put into the <code>ev</code> namespace.</p> +<p>It should support all the same embedding options as <cite>ev.h</cite>, most notably +<code>EV_MULTIPLICITY</code>.</p> +<p>Here is a list of things available in the <code>ev</code> namespace:</p> +<dl> +	<dt><code>ev::READ</code>, <code>ev::WRITE</code> etc.</dt> +	<dd> +		<p>These are just enum values with the same values as the <code>EV_READ</code> etc. +macros from <cite>ev.h</cite>.</p> +	</dd> +	<dt><code>ev::tstamp</code>, <code>ev::now</code></dt> +	<dd> +		<p>Aliases to the same types/functions as with the <code>ev_</code> prefix.</p> +	</dd> +	<dt><code>ev::io</code>, <code>ev::timer</code>, <code>ev::periodic</code>, <code>ev::idle</code>, <code>ev::sig</code> etc.</dt> +	<dd> +		<p>For each <code>ev_TYPE</code> watcher in <cite>ev.h</cite> there is a corresponding class of +the same name in the <code>ev</code> namespace, with the exception of <code>ev_signal</code> +which is called <code>ev::sig</code> to avoid clashes with the <code>signal</code> macro +defines by many implementations.</p> +		<p>All of those classes have these methods:</p> +		<p> +			<dl> +				<dt>ev::TYPE::TYPE (object *, object::method *)</dt> +				<dt>ev::TYPE::TYPE (object *, object::method *, struct ev_loop *)</dt> +				<dt>ev::TYPE::~TYPE</dt> +				<dd> +					<p>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 +<code>ev_init</code> for you, which means you have to call the <code>set</code> method +before starting it. If you do not specify a loop then the constructor +automatically associates the default loop with this watcher.</p> +					<p>The destructor automatically stops the watcher if it is active.</p> +				</dd> +				<dt>w->set (struct ev_loop *)</dt> +				<dd> +					<p>Associates a different <code>struct ev_loop</code> with this watcher. You can only +do this when the watcher is inactive (and not pending either).</p> +				</dd> +				<dt>w->set ([args])</dt> +				<dd> +					<p>Basically the same as <code>ev_TYPE_set</code>, with the same args. Must be +called at least once.  Unlike the C counterpart, an active watcher gets +automatically stopped and restarted.</p> +				</dd> +				<dt>w->start ()</dt> +				<dd> +					<p>Starts the watcher. Note that there is no <code>loop</code> argument as the +constructor already takes the loop.</p> +				</dd> +				<dt>w->stop ()</dt> +				<dd> +					<p>Stops the watcher if it is active. Again, no <code>loop</code> argument.</p> +				</dd> +				<dt>w->again ()       <code>ev::timer</code>, <code>ev::periodic</code> only</dt> +				<dd> +					<p>For <code>ev::timer</code> and <code>ev::periodic</code>, this invokes the corresponding +<code>ev_TYPE_again</code> function.</p> +				</dd> +				<dt>w->sweep ()       <code>ev::embed</code> only</dt> +				<dd> +					<p>Invokes <code>ev_embed_sweep</code>.</p> +				</dd> +			</dl> +		</p> +	</dd> +</dl> +<p>Example: Define a class with an IO and idle watcher, start one of them in +the constructor.</p> +<pre>  class myclass +  { +    ev_io   io;   void io_cb   (ev::io   &w, int revents); +    ev_idle idle  void idle_cb (ev::idle &w, int revents); + +    myclass (); +  } + +  myclass::myclass (int fd) +  : io   (this, &myclass::io_cb), +    idle (this, &myclass::idle_cb) +  { +    io.start (fd, ev::READ); +  } + +</pre>  </div>  <h1 id="AUTHOR">AUTHOR</h1><p><a href="#TOP" class="toplink">Top</a></p> | 
