1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
#include <stdio.h>
#include <aml.h>
#include <poll.h>
#include <signal.h>
#include <assert.h>
static int do_exit = 0;
static void on_tick(void* ticker)
{
int* count_ptr = aml_get_userdata(ticker);
*count_ptr += 1;
printf("tick %d!\n", *count_ptr);
if (*count_ptr >= 10)
aml_exit(aml_get_default());
}
static void on_sigint(void* sig)
{
do_exit = 1;
}
int main()
{
struct aml* aml = aml_new();
if (!aml)
return 1;
aml_set_default(aml);
int fd = aml_get_fd(aml);
assert(fd >= 0);
int count = 0;
struct aml_signal* sig = aml_signal_new(SIGINT, on_sigint, NULL, NULL);
if (!sig)
goto failure;
aml_start(aml, sig);
aml_unref(sig);
struct aml_ticker* ticker = aml_ticker_new(1000000, on_tick, &count, NULL);
if (!ticker)
goto failure;
aml_start(aml, ticker);
aml_unref(ticker);
struct pollfd pollfd = {
.fd = fd,
.events = POLLIN,
};
while (!do_exit) {
aml_poll(aml, 0);
aml_dispatch(aml);
int nfds = poll(&pollfd, 1, -1);
if (nfds != 1)
continue;
}
printf("Exiting...\n");
aml_unref(aml);
return 0;
failure:
aml_unref(aml);
return 1;
}
|