… | |
… | |
1087 | descriptor even if the file descriptor number itself did not change. |
1087 | descriptor even if the file descriptor number itself did not change. |
1088 | .PP |
1088 | .PP |
1089 | This is how one would do it normally anyway, the important point is that |
1089 | This is how one would do it normally anyway, the important point is that |
1090 | the libev application should not optimise around libev but should leave |
1090 | the libev application should not optimise around libev but should leave |
1091 | optimisations to libev. |
1091 | optimisations to libev. |
|
|
1092 | .PP |
|
|
1093 | \fIWatcher-Specific Functions\fR |
|
|
1094 | .IX Subsection "Watcher-Specific Functions" |
1092 | .IP "ev_io_init (ev_io *, callback, int fd, int events)" 4 |
1095 | .IP "ev_io_init (ev_io *, callback, int fd, int events)" 4 |
1093 | .IX Item "ev_io_init (ev_io *, callback, int fd, int events)" |
1096 | .IX Item "ev_io_init (ev_io *, callback, int fd, int events)" |
1094 | .PD 0 |
1097 | .PD 0 |
1095 | .IP "ev_io_set (ev_io *, int fd, int events)" 4 |
1098 | .IP "ev_io_set (ev_io *, int fd, int events)" 4 |
1096 | .IX Item "ev_io_set (ev_io *, int fd, int events)" |
1099 | .IX Item "ev_io_set (ev_io *, int fd, int events)" |
… | |
… | |
1149 | .Ve |
1152 | .Ve |
1150 | .PP |
1153 | .PP |
1151 | The callback is guarenteed to be invoked only when its timeout has passed, |
1154 | The callback is guarenteed to be invoked only when its timeout has passed, |
1152 | but if multiple timers become ready during the same loop iteration then |
1155 | but if multiple timers become ready during the same loop iteration then |
1153 | order of execution is undefined. |
1156 | order of execution is undefined. |
|
|
1157 | .PP |
|
|
1158 | \fIWatcher-Specific Functions and Data Members\fR |
|
|
1159 | .IX Subsection "Watcher-Specific Functions and Data Members" |
1154 | .IP "ev_timer_init (ev_timer *, callback, ev_tstamp after, ev_tstamp repeat)" 4 |
1160 | .IP "ev_timer_init (ev_timer *, callback, ev_tstamp after, ev_tstamp repeat)" 4 |
1155 | .IX Item "ev_timer_init (ev_timer *, callback, ev_tstamp after, ev_tstamp repeat)" |
1161 | .IX Item "ev_timer_init (ev_timer *, callback, ev_tstamp after, ev_tstamp repeat)" |
1156 | .PD 0 |
1162 | .PD 0 |
1157 | .IP "ev_timer_set (ev_timer *, ev_tstamp after, ev_tstamp repeat)" 4 |
1163 | .IP "ev_timer_set (ev_timer *, ev_tstamp after, ev_tstamp repeat)" 4 |
1158 | .IX Item "ev_timer_set (ev_timer *, ev_tstamp after, ev_tstamp repeat)" |
1164 | .IX Item "ev_timer_set (ev_timer *, ev_tstamp after, ev_tstamp repeat)" |
… | |
… | |
1269 | rules. |
1275 | rules. |
1270 | .PP |
1276 | .PP |
1271 | As with timers, the callback is guarenteed to be invoked only when the |
1277 | As with timers, the callback is guarenteed to be invoked only when the |
1272 | time (\f(CW\*(C`at\*(C'\fR) has been passed, but if multiple periodic timers become ready |
1278 | time (\f(CW\*(C`at\*(C'\fR) has been passed, but if multiple periodic timers become ready |
1273 | during the same loop iteration then order of execution is undefined. |
1279 | during the same loop iteration then order of execution is undefined. |
|
|
1280 | .PP |
|
|
1281 | \fIWatcher-Specific Functions and Data Members\fR |
|
|
1282 | .IX Subsection "Watcher-Specific Functions and Data Members" |
1274 | .IP "ev_periodic_init (ev_periodic *, callback, ev_tstamp at, ev_tstamp interval, reschedule_cb)" 4 |
1283 | .IP "ev_periodic_init (ev_periodic *, callback, ev_tstamp at, ev_tstamp interval, reschedule_cb)" 4 |
1275 | .IX Item "ev_periodic_init (ev_periodic *, callback, ev_tstamp at, ev_tstamp interval, reschedule_cb)" |
1284 | .IX Item "ev_periodic_init (ev_periodic *, callback, ev_tstamp at, ev_tstamp interval, reschedule_cb)" |
1276 | .PD 0 |
1285 | .PD 0 |
1277 | .IP "ev_periodic_set (ev_periodic *, ev_tstamp after, ev_tstamp repeat, reschedule_cb)" 4 |
1286 | .IP "ev_periodic_set (ev_periodic *, ev_tstamp after, ev_tstamp repeat, reschedule_cb)" 4 |
1278 | .IX Item "ev_periodic_set (ev_periodic *, ev_tstamp after, ev_tstamp repeat, reschedule_cb)" |
1287 | .IX Item "ev_periodic_set (ev_periodic *, ev_tstamp after, ev_tstamp repeat, reschedule_cb)" |
… | |
… | |
1429 | first watcher gets started will libev actually register a signal watcher |
1438 | first watcher gets started will libev actually register a signal watcher |
1430 | with the kernel (thus it coexists with your own signal handlers as long |
1439 | with the kernel (thus it coexists with your own signal handlers as long |
1431 | as you don't register any with libev). Similarly, when the last signal |
1440 | as you don't register any with libev). Similarly, when the last signal |
1432 | watcher for a signal is stopped libev will reset the signal handler to |
1441 | watcher for a signal is stopped libev will reset the signal handler to |
1433 | \&\s-1SIG_DFL\s0 (regardless of what it was set to before). |
1442 | \&\s-1SIG_DFL\s0 (regardless of what it was set to before). |
|
|
1443 | .PP |
|
|
1444 | \fIWatcher-Specific Functions and Data Members\fR |
|
|
1445 | .IX Subsection "Watcher-Specific Functions and Data Members" |
1434 | .IP "ev_signal_init (ev_signal *, callback, int signum)" 4 |
1446 | .IP "ev_signal_init (ev_signal *, callback, int signum)" 4 |
1435 | .IX Item "ev_signal_init (ev_signal *, callback, int signum)" |
1447 | .IX Item "ev_signal_init (ev_signal *, callback, int signum)" |
1436 | .PD 0 |
1448 | .PD 0 |
1437 | .IP "ev_signal_set (ev_signal *, int signum)" 4 |
1449 | .IP "ev_signal_set (ev_signal *, int signum)" 4 |
1438 | .IX Item "ev_signal_set (ev_signal *, int signum)" |
1450 | .IX Item "ev_signal_set (ev_signal *, int signum)" |
… | |
… | |
1445 | .ie n .Sh """ev_child"" \- watch out for process status changes" |
1457 | .ie n .Sh """ev_child"" \- watch out for process status changes" |
1446 | .el .Sh "\f(CWev_child\fP \- watch out for process status changes" |
1458 | .el .Sh "\f(CWev_child\fP \- watch out for process status changes" |
1447 | .IX Subsection "ev_child - watch out for process status changes" |
1459 | .IX Subsection "ev_child - watch out for process status changes" |
1448 | Child watchers trigger when your process receives a \s-1SIGCHLD\s0 in response to |
1460 | Child watchers trigger when your process receives a \s-1SIGCHLD\s0 in response to |
1449 | some child status changes (most typically when a child of yours dies). |
1461 | some child status changes (most typically when a child of yours dies). |
|
|
1462 | .PP |
|
|
1463 | \fIWatcher-Specific Functions and Data Members\fR |
|
|
1464 | .IX Subsection "Watcher-Specific Functions and Data Members" |
1450 | .IP "ev_child_init (ev_child *, callback, int pid)" 4 |
1465 | .IP "ev_child_init (ev_child *, callback, int pid)" 4 |
1451 | .IX Item "ev_child_init (ev_child *, callback, int pid)" |
1466 | .IX Item "ev_child_init (ev_child *, callback, int pid)" |
1452 | .PD 0 |
1467 | .PD 0 |
1453 | .IP "ev_child_set (ev_child *, int pid)" 4 |
1468 | .IP "ev_child_set (ev_child *, int pid)" 4 |
1454 | .IX Item "ev_child_set (ev_child *, int pid)" |
1469 | .IX Item "ev_child_set (ev_child *, int pid)" |
… | |
… | |
1519 | reader). Inotify will be used to give hints only and should not change the |
1534 | reader). Inotify will be used to give hints only and should not change the |
1520 | semantics of \f(CW\*(C`ev_stat\*(C'\fR watchers, which means that libev sometimes needs |
1535 | semantics of \f(CW\*(C`ev_stat\*(C'\fR watchers, which means that libev sometimes needs |
1521 | to fall back to regular polling again even with inotify, but changes are |
1536 | to fall back to regular polling again even with inotify, but changes are |
1522 | usually detected immediately, and if the file exists there will be no |
1537 | usually detected immediately, and if the file exists there will be no |
1523 | polling. |
1538 | polling. |
|
|
1539 | .PP |
|
|
1540 | \fIWatcher-Specific Functions and Data Members\fR |
|
|
1541 | .IX Subsection "Watcher-Specific Functions and Data Members" |
1524 | .IP "ev_stat_init (ev_stat *, callback, const char *path, ev_tstamp interval)" 4 |
1542 | .IP "ev_stat_init (ev_stat *, callback, const char *path, ev_tstamp interval)" 4 |
1525 | .IX Item "ev_stat_init (ev_stat *, callback, const char *path, ev_tstamp interval)" |
1543 | .IX Item "ev_stat_init (ev_stat *, callback, const char *path, ev_tstamp interval)" |
1526 | .PD 0 |
1544 | .PD 0 |
1527 | .IP "ev_stat_set (ev_stat *, const char *path, ev_tstamp interval)" 4 |
1545 | .IP "ev_stat_set (ev_stat *, const char *path, ev_tstamp interval)" 4 |
1528 | .IX Item "ev_stat_set (ev_stat *, const char *path, ev_tstamp interval)" |
1546 | .IX Item "ev_stat_set (ev_stat *, const char *path, ev_tstamp interval)" |
… | |
… | |
1607 | .PP |
1625 | .PP |
1608 | Apart from keeping your process non-blocking (which is a useful |
1626 | Apart from keeping your process non-blocking (which is a useful |
1609 | effect on its own sometimes), idle watchers are a good place to do |
1627 | effect on its own sometimes), idle watchers are a good place to do |
1610 | \&\*(L"pseudo\-background processing\*(R", or delay processing stuff to after the |
1628 | \&\*(L"pseudo\-background processing\*(R", or delay processing stuff to after the |
1611 | event loop has handled all outstanding events. |
1629 | event loop has handled all outstanding events. |
|
|
1630 | .PP |
|
|
1631 | \fIWatcher-Specific Functions and Data Members\fR |
|
|
1632 | .IX Subsection "Watcher-Specific Functions and Data Members" |
1612 | .IP "ev_idle_init (ev_signal *, callback)" 4 |
1633 | .IP "ev_idle_init (ev_signal *, callback)" 4 |
1613 | .IX Item "ev_idle_init (ev_signal *, callback)" |
1634 | .IX Item "ev_idle_init (ev_signal *, callback)" |
1614 | Initialises and configures the idle watcher \- it has no parameters of any |
1635 | Initialises and configures the idle watcher \- it has no parameters of any |
1615 | kind. There is a \f(CW\*(C`ev_idle_set\*(C'\fR macro, but using it is utterly pointless, |
1636 | kind. There is a \f(CW\*(C`ev_idle_set\*(C'\fR macro, but using it is utterly pointless, |
1616 | believe me. |
1637 | believe me. |
… | |
… | |
1681 | supports this, they will be called before other \f(CW\*(C`ev_check\*(C'\fR watchers did |
1702 | supports this, they will be called before other \f(CW\*(C`ev_check\*(C'\fR watchers did |
1682 | their job. As \f(CW\*(C`ev_check\*(C'\fR watchers are often used to embed other event |
1703 | their job. As \f(CW\*(C`ev_check\*(C'\fR watchers are often used to embed other event |
1683 | loops those other event loops might be in an unusable state until their |
1704 | loops those other event loops might be in an unusable state until their |
1684 | \&\f(CW\*(C`ev_check\*(C'\fR watcher ran (always remind yourself to coexist peacefully with |
1705 | \&\f(CW\*(C`ev_check\*(C'\fR watcher ran (always remind yourself to coexist peacefully with |
1685 | others). |
1706 | others). |
|
|
1707 | .PP |
|
|
1708 | \fIWatcher-Specific Functions and Data Members\fR |
|
|
1709 | .IX Subsection "Watcher-Specific Functions and Data Members" |
1686 | .IP "ev_prepare_init (ev_prepare *, callback)" 4 |
1710 | .IP "ev_prepare_init (ev_prepare *, callback)" 4 |
1687 | .IX Item "ev_prepare_init (ev_prepare *, callback)" |
1711 | .IX Item "ev_prepare_init (ev_prepare *, callback)" |
1688 | .PD 0 |
1712 | .PD 0 |
1689 | .IP "ev_check_init (ev_check *, callback)" 4 |
1713 | .IP "ev_check_init (ev_check *, callback)" 4 |
1690 | .IX Item "ev_check_init (ev_check *, callback)" |
1714 | .IX Item "ev_check_init (ev_check *, callback)" |
… | |
… | |
1937 | \& ev_embed_start (loop_hi, &embed); |
1961 | \& ev_embed_start (loop_hi, &embed); |
1938 | \& } |
1962 | \& } |
1939 | \& else |
1963 | \& else |
1940 | \& loop_lo = loop_hi; |
1964 | \& loop_lo = loop_hi; |
1941 | .Ve |
1965 | .Ve |
|
|
1966 | .PP |
|
|
1967 | \fIWatcher-Specific Functions and Data Members\fR |
|
|
1968 | .IX Subsection "Watcher-Specific Functions and Data Members" |
1942 | .IP "ev_embed_init (ev_embed *, callback, struct ev_loop *embedded_loop)" 4 |
1969 | .IP "ev_embed_init (ev_embed *, callback, struct ev_loop *embedded_loop)" 4 |
1943 | .IX Item "ev_embed_init (ev_embed *, callback, struct ev_loop *embedded_loop)" |
1970 | .IX Item "ev_embed_init (ev_embed *, callback, struct ev_loop *embedded_loop)" |
1944 | .PD 0 |
1971 | .PD 0 |
1945 | .IP "ev_embed_set (ev_embed *, callback, struct ev_loop *embedded_loop)" 4 |
1972 | .IP "ev_embed_set (ev_embed *, callback, struct ev_loop *embedded_loop)" 4 |
1946 | .IX Item "ev_embed_set (ev_embed *, callback, struct ev_loop *embedded_loop)" |
1973 | .IX Item "ev_embed_set (ev_embed *, callback, struct ev_loop *embedded_loop)" |