… | |
… | |
4 | <head> |
4 | <head> |
5 | <title>libev</title> |
5 | <title>libev</title> |
6 | <meta name="description" content="Pod documentation for libev" /> |
6 | <meta name="description" content="Pod documentation for libev" /> |
7 | <meta name="inputfile" content="<standard input>" /> |
7 | <meta name="inputfile" content="<standard input>" /> |
8 | <meta name="outputfile" content="<standard output>" /> |
8 | <meta name="outputfile" content="<standard output>" /> |
9 | <meta name="created" content="Sat Dec 8 23:11:11 2007" /> |
9 | <meta name="created" content="Wed Dec 12 18:55:04 2007" /> |
10 | <meta name="generator" content="Pod::Xhtml 1.57" /> |
10 | <meta name="generator" content="Pod::Xhtml 1.57" /> |
11 | <link rel="stylesheet" href="http://res.tst.eu/pod.css"/></head> |
11 | <link rel="stylesheet" href="http://res.tst.eu/pod.css"/></head> |
12 | <body> |
12 | <body> |
13 | <div class="pod"> |
13 | <div class="pod"> |
14 | <!-- INDEX START --> |
14 | <!-- INDEX START --> |
… | |
… | |
27 | <ul><li><a href="#GENERIC_WATCHER_FUNCTIONS">GENERIC WATCHER FUNCTIONS</a></li> |
27 | <ul><li><a href="#GENERIC_WATCHER_FUNCTIONS">GENERIC WATCHER FUNCTIONS</a></li> |
28 | <li><a href="#ASSOCIATING_CUSTOM_DATA_WITH_A_WATCH">ASSOCIATING CUSTOM DATA WITH A WATCHER</a></li> |
28 | <li><a href="#ASSOCIATING_CUSTOM_DATA_WITH_A_WATCH">ASSOCIATING CUSTOM DATA WITH A WATCHER</a></li> |
29 | </ul> |
29 | </ul> |
30 | </li> |
30 | </li> |
31 | <li><a href="#WATCHER_TYPES">WATCHER TYPES</a> |
31 | <li><a href="#WATCHER_TYPES">WATCHER TYPES</a> |
32 | <ul><li><a href="#code_ev_io_code_is_this_file_descrip"><code>ev_io</code> - is this file descriptor readable or writable?</a></li> |
32 | <ul><li><a href="#code_ev_io_code_is_this_file_descrip"><code>ev_io</code> - is this file descriptor readable or writable?</a> |
|
|
33 | <ul><li><a href="#The_special_problem_of_disappearing_">The special problem of disappearing file descriptors</a></li> |
|
|
34 | <li><a href="#Watcher_Specific_Functions">Watcher-Specific Functions</a></li> |
|
|
35 | </ul> |
|
|
36 | </li> |
33 | <li><a href="#code_ev_timer_code_relative_and_opti"><code>ev_timer</code> - relative and optionally repeating timeouts</a></li> |
37 | <li><a href="#code_ev_timer_code_relative_and_opti"><code>ev_timer</code> - relative and optionally repeating timeouts</a> |
|
|
38 | <ul><li><a href="#Watcher_Specific_Functions_and_Data_">Watcher-Specific Functions and Data Members</a></li> |
|
|
39 | </ul> |
|
|
40 | </li> |
34 | <li><a href="#code_ev_periodic_code_to_cron_or_not"><code>ev_periodic</code> - to cron or not to cron?</a></li> |
41 | <li><a href="#code_ev_periodic_code_to_cron_or_not"><code>ev_periodic</code> - to cron or not to cron?</a> |
|
|
42 | <ul><li><a href="#Watcher_Specific_Functions_and_Data_-3">Watcher-Specific Functions and Data Members</a></li> |
|
|
43 | </ul> |
|
|
44 | </li> |
35 | <li><a href="#code_ev_signal_code_signal_me_when_a"><code>ev_signal</code> - signal me when a signal gets signalled!</a></li> |
45 | <li><a href="#code_ev_signal_code_signal_me_when_a"><code>ev_signal</code> - signal me when a signal gets signalled!</a> |
|
|
46 | <ul><li><a href="#Watcher_Specific_Functions_and_Data_-4">Watcher-Specific Functions and Data Members</a></li> |
|
|
47 | </ul> |
|
|
48 | </li> |
36 | <li><a href="#code_ev_child_code_watch_out_for_pro"><code>ev_child</code> - watch out for process status changes</a></li> |
49 | <li><a href="#code_ev_child_code_watch_out_for_pro"><code>ev_child</code> - watch out for process status changes</a> |
|
|
50 | <ul><li><a href="#Watcher_Specific_Functions_and_Data_-5">Watcher-Specific Functions and Data Members</a></li> |
|
|
51 | </ul> |
|
|
52 | </li> |
37 | <li><a href="#code_ev_stat_code_did_the_file_attri"><code>ev_stat</code> - did the file attributes just change?</a></li> |
53 | <li><a href="#code_ev_stat_code_did_the_file_attri"><code>ev_stat</code> - did the file attributes just change?</a> |
|
|
54 | <ul><li><a href="#Watcher_Specific_Functions_and_Data_-6">Watcher-Specific Functions and Data Members</a></li> |
|
|
55 | </ul> |
|
|
56 | </li> |
38 | <li><a href="#code_ev_idle_code_when_you_ve_got_no"><code>ev_idle</code> - when you've got nothing better to do...</a></li> |
57 | <li><a href="#code_ev_idle_code_when_you_ve_got_no"><code>ev_idle</code> - when you've got nothing better to do...</a> |
|
|
58 | <ul><li><a href="#Watcher_Specific_Functions_and_Data_-7">Watcher-Specific Functions and Data Members</a></li> |
|
|
59 | </ul> |
|
|
60 | </li> |
39 | <li><a href="#code_ev_prepare_code_and_code_ev_che"><code>ev_prepare</code> and <code>ev_check</code> - customise your event loop!</a></li> |
61 | <li><a href="#code_ev_prepare_code_and_code_ev_che"><code>ev_prepare</code> and <code>ev_check</code> - customise your event loop!</a> |
|
|
62 | <ul><li><a href="#Watcher_Specific_Functions_and_Data_-8">Watcher-Specific Functions and Data Members</a></li> |
|
|
63 | </ul> |
|
|
64 | </li> |
40 | <li><a href="#code_ev_embed_code_when_one_backend_"><code>ev_embed</code> - when one backend isn't enough...</a></li> |
65 | <li><a href="#code_ev_embed_code_when_one_backend_"><code>ev_embed</code> - when one backend isn't enough...</a> |
|
|
66 | <ul><li><a href="#Watcher_Specific_Functions_and_Data_-9">Watcher-Specific Functions and Data Members</a></li> |
|
|
67 | </ul> |
|
|
68 | </li> |
41 | <li><a href="#code_ev_fork_code_the_audacity_to_re"><code>ev_fork</code> - the audacity to resume the event loop after a fork</a></li> |
69 | <li><a href="#code_ev_fork_code_the_audacity_to_re"><code>ev_fork</code> - the audacity to resume the event loop after a fork</a></li> |
42 | </ul> |
70 | </ul> |
43 | </li> |
71 | </li> |
44 | <li><a href="#OTHER_FUNCTIONS">OTHER FUNCTIONS</a></li> |
72 | <li><a href="#OTHER_FUNCTIONS">OTHER FUNCTIONS</a></li> |
45 | <li><a href="#LIBEVENT_EMULATION">LIBEVENT EMULATION</a></li> |
73 | <li><a href="#LIBEVENT_EMULATION">LIBEVENT EMULATION</a></li> |
… | |
… | |
185 | you actually want to know.</p> |
213 | you actually want to know.</p> |
186 | </dd> |
214 | </dd> |
187 | <dt>int ev_version_major ()</dt> |
215 | <dt>int ev_version_major ()</dt> |
188 | <dt>int ev_version_minor ()</dt> |
216 | <dt>int ev_version_minor ()</dt> |
189 | <dd> |
217 | <dd> |
190 | <p>You can find out the major and minor version numbers of the library |
218 | <p>You can find out the major and minor ABI version numbers of the library |
191 | you linked against by calling the functions <code>ev_version_major</code> and |
219 | you linked against by calling the functions <code>ev_version_major</code> and |
192 | <code>ev_version_minor</code>. If you want, you can compare against the global |
220 | <code>ev_version_minor</code>. If you want, you can compare against the global |
193 | symbols <code>EV_VERSION_MAJOR</code> and <code>EV_VERSION_MINOR</code>, which specify the |
221 | symbols <code>EV_VERSION_MAJOR</code> and <code>EV_VERSION_MINOR</code>, which specify the |
194 | version of the library your program was compiled against.</p> |
222 | version of the library your program was compiled against.</p> |
|
|
223 | <p>These version numbers refer to the ABI version of the library, not the |
|
|
224 | release version.</p> |
195 | <p>Usually, it's a good idea to terminate if the major versions mismatch, |
225 | <p>Usually, it's a good idea to terminate if the major versions mismatch, |
196 | as this indicates an incompatible change. Minor versions are usually |
226 | as this indicates an incompatible change. Minor versions are usually |
197 | compatible to older versions, so a larger minor version alone is usually |
227 | compatible to older versions, so a larger minor version alone is usually |
198 | not a problem.</p> |
228 | not a problem.</p> |
199 | <p>Example: Make sure we haven't accidentally been linked against the wrong |
229 | <p>Example: Make sure we haven't accidentally been linked against the wrong |
200 | version.</p> |
230 | version.</p> |
201 | <pre> assert (("libev version mismatch", |
231 | <pre> assert (("libev version mismatch", |
… | |
… | |
939 | <p>If you cannot run the fd in non-blocking mode (for example you should not |
969 | <p>If you cannot run the fd in non-blocking mode (for example you should not |
940 | play around with an Xlib connection), then you have to seperately re-test |
970 | play around with an Xlib connection), then you have to seperately re-test |
941 | whether a file descriptor is really ready with a known-to-be good interface |
971 | whether a file descriptor is really ready with a known-to-be good interface |
942 | such as poll (fortunately in our Xlib example, Xlib already does this on |
972 | such as poll (fortunately in our Xlib example, Xlib already does this on |
943 | its own, so its quite safe to use).</p> |
973 | its own, so its quite safe to use).</p> |
|
|
974 | |
|
|
975 | </div> |
|
|
976 | <h3 id="The_special_problem_of_disappearing_">The special problem of disappearing file descriptors</h3> |
|
|
977 | <div id="The_special_problem_of_disappearing_-2"> |
|
|
978 | <p>Some backends (e.g kqueue, epoll) need to be told about closing a file |
|
|
979 | descriptor (either by calling <code>close</code> explicitly or by any other means, |
|
|
980 | such as <code>dup</code>). The reason is that you register interest in some file |
|
|
981 | descriptor, but when it goes away, the operating system will silently drop |
|
|
982 | this interest. If another file descriptor with the same number then is |
|
|
983 | registered with libev, there is no efficient way to see that this is, in |
|
|
984 | fact, a different file descriptor.</p> |
|
|
985 | <p>To avoid having to explicitly tell libev about such cases, libev follows |
|
|
986 | the following policy: Each time <code>ev_io_set</code> is being called, libev |
|
|
987 | will assume that this is potentially a new file descriptor, otherwise |
|
|
988 | it is assumed that the file descriptor stays the same. That means that |
|
|
989 | you <i>have</i> to call <code>ev_io_set</code> (or <code>ev_io_init</code>) when you change the |
|
|
990 | descriptor even if the file descriptor number itself did not change.</p> |
|
|
991 | <p>This is how one would do it normally anyway, the important point is that |
|
|
992 | the libev application should not optimise around libev but should leave |
|
|
993 | optimisations to libev.</p> |
|
|
994 | |
|
|
995 | |
|
|
996 | |
|
|
997 | |
|
|
998 | |
|
|
999 | </div> |
|
|
1000 | <h3 id="Watcher_Specific_Functions">Watcher-Specific Functions</h3> |
|
|
1001 | <div id="Watcher_Specific_Functions_CONTENT"> |
944 | <dl> |
1002 | <dl> |
945 | <dt>ev_io_init (ev_io *, callback, int fd, int events)</dt> |
1003 | <dt>ev_io_init (ev_io *, callback, int fd, int events)</dt> |
946 | <dt>ev_io_set (ev_io *, int fd, int events)</dt> |
1004 | <dt>ev_io_set (ev_io *, int fd, int events)</dt> |
947 | <dd> |
1005 | <dd> |
948 | <p>Configures an <code>ev_io</code> watcher. The <code>fd</code> is the file descriptor to |
1006 | <p>Configures an <code>ev_io</code> watcher. The <code>fd</code> is the file descriptor to |
… | |
… | |
999 | |
1057 | |
1000 | </pre> |
1058 | </pre> |
1001 | <p>The callback is guarenteed to be invoked only when its timeout has passed, |
1059 | <p>The callback is guarenteed to be invoked only when its timeout has passed, |
1002 | but if multiple timers become ready during the same loop iteration then |
1060 | but if multiple timers become ready during the same loop iteration then |
1003 | order of execution is undefined.</p> |
1061 | order of execution is undefined.</p> |
|
|
1062 | |
|
|
1063 | </div> |
|
|
1064 | <h3 id="Watcher_Specific_Functions_and_Data_">Watcher-Specific Functions and Data Members</h3> |
|
|
1065 | <div id="Watcher_Specific_Functions_and_Data_-2"> |
1004 | <dl> |
1066 | <dl> |
1005 | <dt>ev_timer_init (ev_timer *, callback, ev_tstamp after, ev_tstamp repeat)</dt> |
1067 | <dt>ev_timer_init (ev_timer *, callback, ev_tstamp after, ev_tstamp repeat)</dt> |
1006 | <dt>ev_timer_set (ev_timer *, ev_tstamp after, ev_tstamp repeat)</dt> |
1068 | <dt>ev_timer_set (ev_timer *, ev_tstamp after, ev_tstamp repeat)</dt> |
1007 | <dd> |
1069 | <dd> |
1008 | <p>Configure the timer to trigger after <code>after</code> seconds. If <code>repeat</code> is |
1070 | <p>Configure the timer to trigger after <code>after</code> seconds. If <code>repeat</code> is |
… | |
… | |
1097 | but on wallclock time (absolute time). You can tell a periodic watcher |
1159 | but on wallclock time (absolute time). You can tell a periodic watcher |
1098 | to trigger "at" some specific point in time. For example, if you tell a |
1160 | to trigger "at" some specific point in time. For example, if you tell a |
1099 | periodic watcher to trigger in 10 seconds (by specifiying e.g. <code>ev_now () |
1161 | periodic watcher to trigger in 10 seconds (by specifiying e.g. <code>ev_now () |
1100 | + 10.</code>) and then reset your system clock to the last year, then it will |
1162 | + 10.</code>) and then reset your system clock to the last year, then it will |
1101 | take a year to trigger the event (unlike an <code>ev_timer</code>, which would trigger |
1163 | take a year to trigger the event (unlike an <code>ev_timer</code>, which would trigger |
1102 | roughly 10 seconds later and of course not if you reset your system time |
1164 | roughly 10 seconds later).</p> |
1103 | again).</p> |
|
|
1104 | <p>They can also be used to implement vastly more complex timers, such as |
1165 | <p>They can also be used to implement vastly more complex timers, such as |
1105 | triggering an event on eahc midnight, local time.</p> |
1166 | triggering an event on each midnight, local time or other, complicated, |
|
|
1167 | rules.</p> |
1106 | <p>As with timers, the callback is guarenteed to be invoked only when the |
1168 | <p>As with timers, the callback is guarenteed to be invoked only when the |
1107 | time (<code>at</code>) has been passed, but if multiple periodic timers become ready |
1169 | time (<code>at</code>) has been passed, but if multiple periodic timers become ready |
1108 | during the same loop iteration then order of execution is undefined.</p> |
1170 | during the same loop iteration then order of execution is undefined.</p> |
|
|
1171 | |
|
|
1172 | </div> |
|
|
1173 | <h3 id="Watcher_Specific_Functions_and_Data_-3">Watcher-Specific Functions and Data Members</h3> |
|
|
1174 | <div id="Watcher_Specific_Functions_and_Data_-2"> |
1109 | <dl> |
1175 | <dl> |
1110 | <dt>ev_periodic_init (ev_periodic *, callback, ev_tstamp at, ev_tstamp interval, reschedule_cb)</dt> |
1176 | <dt>ev_periodic_init (ev_periodic *, callback, ev_tstamp at, ev_tstamp interval, reschedule_cb)</dt> |
1111 | <dt>ev_periodic_set (ev_periodic *, ev_tstamp after, ev_tstamp repeat, reschedule_cb)</dt> |
1177 | <dt>ev_periodic_set (ev_periodic *, ev_tstamp after, ev_tstamp repeat, reschedule_cb)</dt> |
1112 | <dd> |
1178 | <dd> |
1113 | <p>Lots of arguments, lets sort it out... There are basically three modes of |
1179 | <p>Lots of arguments, lets sort it out... There are basically three modes of |
1114 | operation, and we will explain them from simplest to complex:</p> |
1180 | operation, and we will explain them from simplest to complex:</p> |
1115 | <p> |
1181 | <p> |
1116 | <dl> |
1182 | <dl> |
1117 | <dt>* absolute timer (interval = reschedule_cb = 0)</dt> |
1183 | <dt>* absolute timer (at = time, interval = reschedule_cb = 0)</dt> |
1118 | <dd> |
1184 | <dd> |
1119 | <p>In this configuration the watcher triggers an event at the wallclock time |
1185 | <p>In this configuration the watcher triggers an event at the wallclock time |
1120 | <code>at</code> and doesn't repeat. It will not adjust when a time jump occurs, |
1186 | <code>at</code> and doesn't repeat. It will not adjust when a time jump occurs, |
1121 | that is, if it is to be run at January 1st 2011 then it will run when the |
1187 | that is, if it is to be run at January 1st 2011 then it will run when the |
1122 | system time reaches or surpasses this time.</p> |
1188 | system time reaches or surpasses this time.</p> |
1123 | </dd> |
1189 | </dd> |
1124 | <dt>* non-repeating interval timer (interval > 0, reschedule_cb = 0)</dt> |
1190 | <dt>* non-repeating interval timer (at = offset, interval > 0, reschedule_cb = 0)</dt> |
1125 | <dd> |
1191 | <dd> |
1126 | <p>In this mode the watcher will always be scheduled to time out at the next |
1192 | <p>In this mode the watcher will always be scheduled to time out at the next |
1127 | <code>at + N * interval</code> time (for some integer N) and then repeat, regardless |
1193 | <code>at + N * interval</code> time (for some integer N, which can also be negative) |
1128 | of any time jumps.</p> |
1194 | and then repeat, regardless of any time jumps.</p> |
1129 | <p>This can be used to create timers that do not drift with respect to system |
1195 | <p>This can be used to create timers that do not drift with respect to system |
1130 | time:</p> |
1196 | time:</p> |
1131 | <pre> ev_periodic_set (&periodic, 0., 3600., 0); |
1197 | <pre> ev_periodic_set (&periodic, 0., 3600., 0); |
1132 | |
1198 | |
1133 | </pre> |
1199 | </pre> |
… | |
… | |
1136 | full hour (UTC), or more correctly, when the system time is evenly divisible |
1202 | full hour (UTC), or more correctly, when the system time is evenly divisible |
1137 | by 3600.</p> |
1203 | by 3600.</p> |
1138 | <p>Another way to think about it (for the mathematically inclined) is that |
1204 | <p>Another way to think about it (for the mathematically inclined) is that |
1139 | <code>ev_periodic</code> will try to run the callback in this mode at the next possible |
1205 | <code>ev_periodic</code> will try to run the callback in this mode at the next possible |
1140 | time where <code>time = at (mod interval)</code>, regardless of any time jumps.</p> |
1206 | time where <code>time = at (mod interval)</code>, regardless of any time jumps.</p> |
|
|
1207 | <p>For numerical stability it is preferable that the <code>at</code> value is near |
|
|
1208 | <code>ev_now ()</code> (the current time), but there is no range requirement for |
|
|
1209 | this value.</p> |
1141 | </dd> |
1210 | </dd> |
1142 | <dt>* manual reschedule mode (reschedule_cb = callback)</dt> |
1211 | <dt>* manual reschedule mode (at and interval ignored, reschedule_cb = callback)</dt> |
1143 | <dd> |
1212 | <dd> |
1144 | <p>In this mode the values for <code>interval</code> and <code>at</code> are both being |
1213 | <p>In this mode the values for <code>interval</code> and <code>at</code> are both being |
1145 | ignored. Instead, each time the periodic watcher gets scheduled, the |
1214 | ignored. Instead, each time the periodic watcher gets scheduled, the |
1146 | reschedule callback will be called with the watcher as first, and the |
1215 | reschedule callback will be called with the watcher as first, and the |
1147 | current time as second argument.</p> |
1216 | current time as second argument.</p> |
1148 | <p>NOTE: <i>This callback MUST NOT stop or destroy any periodic watcher, |
1217 | <p>NOTE: <i>This callback MUST NOT stop or destroy any periodic watcher, |
1149 | ever, or make any event loop modifications</i>. If you need to stop it, |
1218 | ever, or make any event loop modifications</i>. If you need to stop it, |
1150 | return <code>now + 1e30</code> (or so, fudge fudge) and stop it afterwards (e.g. by |
1219 | return <code>now + 1e30</code> (or so, fudge fudge) and stop it afterwards (e.g. by |
1151 | starting a prepare watcher).</p> |
1220 | starting an <code>ev_prepare</code> watcher, which is legal).</p> |
1152 | <p>Its prototype is <code>ev_tstamp (*reschedule_cb)(struct ev_periodic *w, |
1221 | <p>Its prototype is <code>ev_tstamp (*reschedule_cb)(struct ev_periodic *w, |
1153 | ev_tstamp now)</code>, e.g.:</p> |
1222 | ev_tstamp now)</code>, e.g.:</p> |
1154 | <pre> static ev_tstamp my_rescheduler (struct ev_periodic *w, ev_tstamp now) |
1223 | <pre> static ev_tstamp my_rescheduler (struct ev_periodic *w, ev_tstamp now) |
1155 | { |
1224 | { |
1156 | return now + 60.; |
1225 | return now + 60.; |
… | |
… | |
1176 | <dd> |
1245 | <dd> |
1177 | <p>Simply stops and restarts the periodic watcher again. This is only useful |
1246 | <p>Simply stops and restarts the periodic watcher again. This is only useful |
1178 | when you changed some parameters or the reschedule callback would return |
1247 | when you changed some parameters or the reschedule callback would return |
1179 | a different time than the last time it was called (e.g. in a crond like |
1248 | a different time than the last time it was called (e.g. in a crond like |
1180 | program when the crontabs have changed).</p> |
1249 | program when the crontabs have changed).</p> |
|
|
1250 | </dd> |
|
|
1251 | <dt>ev_tstamp offset [read-write]</dt> |
|
|
1252 | <dd> |
|
|
1253 | <p>When repeating, this contains the offset value, otherwise this is the |
|
|
1254 | absolute point in time (the <code>at</code> value passed to <code>ev_periodic_set</code>).</p> |
|
|
1255 | <p>Can be modified any time, but changes only take effect when the periodic |
|
|
1256 | timer fires or <code>ev_periodic_again</code> is being called.</p> |
1181 | </dd> |
1257 | </dd> |
1182 | <dt>ev_tstamp interval [read-write]</dt> |
1258 | <dt>ev_tstamp interval [read-write]</dt> |
1183 | <dd> |
1259 | <dd> |
1184 | <p>The current interval value. Can be modified any time, but changes only |
1260 | <p>The current interval value. Can be modified any time, but changes only |
1185 | take effect when the periodic timer fires or <code>ev_periodic_again</code> is being |
1261 | take effect when the periodic timer fires or <code>ev_periodic_again</code> is being |
… | |
… | |
1240 | first watcher gets started will libev actually register a signal watcher |
1316 | first watcher gets started will libev actually register a signal watcher |
1241 | with the kernel (thus it coexists with your own signal handlers as long |
1317 | with the kernel (thus it coexists with your own signal handlers as long |
1242 | as you don't register any with libev). Similarly, when the last signal |
1318 | as you don't register any with libev). Similarly, when the last signal |
1243 | watcher for a signal is stopped libev will reset the signal handler to |
1319 | watcher for a signal is stopped libev will reset the signal handler to |
1244 | SIG_DFL (regardless of what it was set to before).</p> |
1320 | SIG_DFL (regardless of what it was set to before).</p> |
|
|
1321 | |
|
|
1322 | </div> |
|
|
1323 | <h3 id="Watcher_Specific_Functions_and_Data_-4">Watcher-Specific Functions and Data Members</h3> |
|
|
1324 | <div id="Watcher_Specific_Functions_and_Data_-2-2"> |
1245 | <dl> |
1325 | <dl> |
1246 | <dt>ev_signal_init (ev_signal *, callback, int signum)</dt> |
1326 | <dt>ev_signal_init (ev_signal *, callback, int signum)</dt> |
1247 | <dt>ev_signal_set (ev_signal *, int signum)</dt> |
1327 | <dt>ev_signal_set (ev_signal *, int signum)</dt> |
1248 | <dd> |
1328 | <dd> |
1249 | <p>Configures the watcher to trigger on the given signal number (usually one |
1329 | <p>Configures the watcher to trigger on the given signal number (usually one |
… | |
… | |
1262 | </div> |
1342 | </div> |
1263 | <h2 id="code_ev_child_code_watch_out_for_pro"><code>ev_child</code> - watch out for process status changes</h2> |
1343 | <h2 id="code_ev_child_code_watch_out_for_pro"><code>ev_child</code> - watch out for process status changes</h2> |
1264 | <div id="code_ev_child_code_watch_out_for_pro-2"> |
1344 | <div id="code_ev_child_code_watch_out_for_pro-2"> |
1265 | <p>Child watchers trigger when your process receives a SIGCHLD in response to |
1345 | <p>Child watchers trigger when your process receives a SIGCHLD in response to |
1266 | some child status changes (most typically when a child of yours dies).</p> |
1346 | some child status changes (most typically when a child of yours dies).</p> |
|
|
1347 | |
|
|
1348 | </div> |
|
|
1349 | <h3 id="Watcher_Specific_Functions_and_Data_-5">Watcher-Specific Functions and Data Members</h3> |
|
|
1350 | <div id="Watcher_Specific_Functions_and_Data_-2-3"> |
1267 | <dl> |
1351 | <dl> |
1268 | <dt>ev_child_init (ev_child *, callback, int pid)</dt> |
1352 | <dt>ev_child_init (ev_child *, callback, int pid)</dt> |
1269 | <dt>ev_child_set (ev_child *, int pid)</dt> |
1353 | <dt>ev_child_set (ev_child *, int pid)</dt> |
1270 | <dd> |
1354 | <dd> |
1271 | <p>Configures the watcher to wait for status changes of process <code>pid</code> (or |
1355 | <p>Configures the watcher to wait for status changes of process <code>pid</code> (or |
… | |
… | |
1334 | reader). Inotify will be used to give hints only and should not change the |
1418 | reader). Inotify will be used to give hints only and should not change the |
1335 | semantics of <code>ev_stat</code> watchers, which means that libev sometimes needs |
1419 | semantics of <code>ev_stat</code> watchers, which means that libev sometimes needs |
1336 | to fall back to regular polling again even with inotify, but changes are |
1420 | to fall back to regular polling again even with inotify, but changes are |
1337 | usually detected immediately, and if the file exists there will be no |
1421 | usually detected immediately, and if the file exists there will be no |
1338 | polling.</p> |
1422 | polling.</p> |
|
|
1423 | |
|
|
1424 | </div> |
|
|
1425 | <h3 id="Watcher_Specific_Functions_and_Data_-6">Watcher-Specific Functions and Data Members</h3> |
|
|
1426 | <div id="Watcher_Specific_Functions_and_Data_-2-4"> |
1339 | <dl> |
1427 | <dl> |
1340 | <dt>ev_stat_init (ev_stat *, callback, const char *path, ev_tstamp interval)</dt> |
1428 | <dt>ev_stat_init (ev_stat *, callback, const char *path, ev_tstamp interval)</dt> |
1341 | <dt>ev_stat_set (ev_stat *, const char *path, ev_tstamp interval)</dt> |
1429 | <dt>ev_stat_set (ev_stat *, const char *path, ev_tstamp interval)</dt> |
1342 | <dd> |
1430 | <dd> |
1343 | <p>Configures the watcher to wait for status changes of the given |
1431 | <p>Configures the watcher to wait for status changes of the given |
… | |
… | |
1421 | active, the process will not block when waiting for new events.</p> |
1509 | active, the process will not block when waiting for new events.</p> |
1422 | <p>Apart from keeping your process non-blocking (which is a useful |
1510 | <p>Apart from keeping your process non-blocking (which is a useful |
1423 | effect on its own sometimes), idle watchers are a good place to do |
1511 | effect on its own sometimes), idle watchers are a good place to do |
1424 | "pseudo-background processing", or delay processing stuff to after the |
1512 | "pseudo-background processing", or delay processing stuff to after the |
1425 | event loop has handled all outstanding events.</p> |
1513 | event loop has handled all outstanding events.</p> |
|
|
1514 | |
|
|
1515 | </div> |
|
|
1516 | <h3 id="Watcher_Specific_Functions_and_Data_-7">Watcher-Specific Functions and Data Members</h3> |
|
|
1517 | <div id="Watcher_Specific_Functions_and_Data_-2-5"> |
1426 | <dl> |
1518 | <dl> |
1427 | <dt>ev_idle_init (ev_signal *, callback)</dt> |
1519 | <dt>ev_idle_init (ev_signal *, callback)</dt> |
1428 | <dd> |
1520 | <dd> |
1429 | <p>Initialises and configures the idle watcher - it has no parameters of any |
1521 | <p>Initialises and configures the idle watcher - it has no parameters of any |
1430 | kind. There is a <code>ev_idle_set</code> macro, but using it is utterly pointless, |
1522 | kind. There is a <code>ev_idle_set</code> macro, but using it is utterly pointless, |
… | |
… | |
1493 | supports this, they will be called before other <code>ev_check</code> watchers did |
1585 | supports this, they will be called before other <code>ev_check</code> watchers did |
1494 | their job. As <code>ev_check</code> watchers are often used to embed other event |
1586 | their job. As <code>ev_check</code> watchers are often used to embed other event |
1495 | loops those other event loops might be in an unusable state until their |
1587 | loops those other event loops might be in an unusable state until their |
1496 | <code>ev_check</code> watcher ran (always remind yourself to coexist peacefully with |
1588 | <code>ev_check</code> watcher ran (always remind yourself to coexist peacefully with |
1497 | others).</p> |
1589 | others).</p> |
|
|
1590 | |
|
|
1591 | </div> |
|
|
1592 | <h3 id="Watcher_Specific_Functions_and_Data_-8">Watcher-Specific Functions and Data Members</h3> |
|
|
1593 | <div id="Watcher_Specific_Functions_and_Data_-2-6"> |
1498 | <dl> |
1594 | <dl> |
1499 | <dt>ev_prepare_init (ev_prepare *, callback)</dt> |
1595 | <dt>ev_prepare_init (ev_prepare *, callback)</dt> |
1500 | <dt>ev_check_init (ev_check *, callback)</dt> |
1596 | <dt>ev_check_init (ev_check *, callback)</dt> |
1501 | <dd> |
1597 | <dd> |
1502 | <p>Initialises and configures the prepare or check watcher - they have no |
1598 | <p>Initialises and configures the prepare or check watcher - they have no |
… | |
… | |
1694 | } |
1790 | } |
1695 | else |
1791 | else |
1696 | loop_lo = loop_hi; |
1792 | loop_lo = loop_hi; |
1697 | |
1793 | |
1698 | </pre> |
1794 | </pre> |
|
|
1795 | |
|
|
1796 | </div> |
|
|
1797 | <h3 id="Watcher_Specific_Functions_and_Data_-9">Watcher-Specific Functions and Data Members</h3> |
|
|
1798 | <div id="Watcher_Specific_Functions_and_Data_-2-7"> |
1699 | <dl> |
1799 | <dl> |
1700 | <dt>ev_embed_init (ev_embed *, callback, struct ev_loop *embedded_loop)</dt> |
1800 | <dt>ev_embed_init (ev_embed *, callback, struct ev_loop *embedded_loop)</dt> |
1701 | <dt>ev_embed_set (ev_embed *, callback, struct ev_loop *embedded_loop)</dt> |
1801 | <dt>ev_embed_set (ev_embed *, callback, struct ev_loop *embedded_loop)</dt> |
1702 | <dd> |
1802 | <dd> |
1703 | <p>Configures the watcher to embed the given loop, which must be |
1803 | <p>Configures the watcher to embed the given loop, which must be |