… | |
… | |
1032 | =item C<EV_WRITE> |
1032 | =item C<EV_WRITE> |
1033 | |
1033 | |
1034 | The file descriptor in the C<ev_io> watcher has become readable and/or |
1034 | The file descriptor in the C<ev_io> watcher has become readable and/or |
1035 | writable. |
1035 | writable. |
1036 | |
1036 | |
1037 | =item C<EV_TIMEOUT> |
1037 | =item C<EV_TIMER> |
1038 | |
1038 | |
1039 | The C<ev_timer> watcher has timed out. |
1039 | The C<ev_timer> watcher has timed out. |
1040 | |
1040 | |
1041 | =item C<EV_PERIODIC> |
1041 | =item C<EV_PERIODIC> |
1042 | |
1042 | |
… | |
… | |
1764 | to the current time (meaning we just have some activity :), then call the |
1764 | to the current time (meaning we just have some activity :), then call the |
1765 | callback, which will "do the right thing" and start the timer: |
1765 | callback, which will "do the right thing" and start the timer: |
1766 | |
1766 | |
1767 | ev_init (timer, callback); |
1767 | ev_init (timer, callback); |
1768 | last_activity = ev_now (loop); |
1768 | last_activity = ev_now (loop); |
1769 | callback (loop, timer, EV_TIMEOUT); |
1769 | callback (loop, timer, EV_TIMER); |
1770 | |
1770 | |
1771 | And when there is some activity, simply store the current time in |
1771 | And when there is some activity, simply store the current time in |
1772 | C<last_activity>, no libev calls at all: |
1772 | C<last_activity>, no libev calls at all: |
1773 | |
1773 | |
1774 | last_actiivty = ev_now (loop); |
1774 | last_actiivty = ev_now (loop); |
… | |
… | |
3179 | |
3179 | |
3180 | If C<timeout> is less than 0, then no timeout watcher will be |
3180 | If C<timeout> is less than 0, then no timeout watcher will be |
3181 | started. Otherwise an C<ev_timer> watcher with after = C<timeout> (and |
3181 | started. Otherwise an C<ev_timer> watcher with after = C<timeout> (and |
3182 | repeat = 0) will be started. C<0> is a valid timeout. |
3182 | repeat = 0) will be started. C<0> is a valid timeout. |
3183 | |
3183 | |
3184 | The callback has the type C<void (*cb)(int revents, void *arg)> and gets |
3184 | The callback has the type C<void (*cb)(int revents, void *arg)> and is |
3185 | passed an C<revents> set like normal event callbacks (a combination of |
3185 | passed an C<revents> set like normal event callbacks (a combination of |
3186 | C<EV_ERROR>, C<EV_READ>, C<EV_WRITE> or C<EV_TIMEOUT>) and the C<arg> |
3186 | C<EV_ERROR>, C<EV_READ>, C<EV_WRITE> or C<EV_TIMER>) and the C<arg> |
3187 | value passed to C<ev_once>. Note that it is possible to receive I<both> |
3187 | value passed to C<ev_once>. Note that it is possible to receive I<both> |
3188 | a timeout and an io event at the same time - you probably should give io |
3188 | a timeout and an io event at the same time - you probably should give io |
3189 | events precedence. |
3189 | events precedence. |
3190 | |
3190 | |
3191 | Example: wait up to ten seconds for data to appear on STDIN_FILENO. |
3191 | Example: wait up to ten seconds for data to appear on STDIN_FILENO. |
3192 | |
3192 | |
3193 | static void stdin_ready (int revents, void *arg) |
3193 | static void stdin_ready (int revents, void *arg) |
3194 | { |
3194 | { |
3195 | if (revents & EV_READ) |
3195 | if (revents & EV_READ) |
3196 | /* stdin might have data for us, joy! */; |
3196 | /* stdin might have data for us, joy! */; |
3197 | else if (revents & EV_TIMEOUT) |
3197 | else if (revents & EV_TIMER) |
3198 | /* doh, nothing entered */; |
3198 | /* doh, nothing entered */; |
3199 | } |
3199 | } |
3200 | |
3200 | |
3201 | ev_once (STDIN_FILENO, EV_READ, 10., stdin_ready, 0); |
3201 | ev_once (STDIN_FILENO, EV_READ, 10., stdin_ready, 0); |
3202 | |
3202 | |
… | |
… | |
4621 | involves iterating over all running async watchers or all signal numbers. |
4621 | involves iterating over all running async watchers or all signal numbers. |
4622 | |
4622 | |
4623 | =back |
4623 | =back |
4624 | |
4624 | |
4625 | |
4625 | |
|
|
4626 | =head1 PORTING FROM 3.X TO 4.X |
|
|
4627 | |
|
|
4628 | The major version 4 introduced some minor incompatible changes to the API. |
|
|
4629 | |
|
|
4630 | =over 4 |
|
|
4631 | |
|
|
4632 | =item C<EV_TIMEOUT> replaced by C<EV_TIMER> in C<revents> |
|
|
4633 | |
|
|
4634 | This is a simple rename - all other watcher types use their name |
|
|
4635 | as revents flag, and now C<ev_timer> does, too. |
|
|
4636 | |
|
|
4637 | Both C<EV_TIMER> and C<EV_TIMEOUT> symbols were present in 3.x versions |
|
|
4638 | and continue to be present for the forseeable future, so this is mostly a |
|
|
4639 | documentation change. |
|
|
4640 | |
|
|
4641 | =item C<EV_MINIMAL> mechanism replaced by C<EV_FEATURES> |
|
|
4642 | |
|
|
4643 | The preprocessor symbol C<EV_MINIMAL> has been replaced by a different |
|
|
4644 | mechanism, C<EV_FEATURES>. Programs using C<EV_MINIMAL> usually compile |
|
|
4645 | and work, but the library code will of course be larger. |
|
|
4646 | |
|
|
4647 | =back |
|
|
4648 | |
|
|
4649 | |
4626 | =head1 GLOSSARY |
4650 | =head1 GLOSSARY |
4627 | |
4651 | |
4628 | =over 4 |
4652 | =over 4 |
4629 | |
4653 | |
4630 | =item active |
4654 | =item active |
… | |
… | |
4651 | A change of state of some external event, such as data now being available |
4675 | A change of state of some external event, such as data now being available |
4652 | for reading on a file descriptor, time having passed or simply not having |
4676 | for reading on a file descriptor, time having passed or simply not having |
4653 | any other events happening anymore. |
4677 | any other events happening anymore. |
4654 | |
4678 | |
4655 | In libev, events are represented as single bits (such as C<EV_READ> or |
4679 | In libev, events are represented as single bits (such as C<EV_READ> or |
4656 | C<EV_TIMEOUT>). |
4680 | C<EV_TIMER>). |
4657 | |
4681 | |
4658 | =item event library |
4682 | =item event library |
4659 | |
4683 | |
4660 | A software package implementing an event model and loop. |
4684 | A software package implementing an event model and loop. |
4661 | |
4685 | |