#include <stdio.h>
#include <stdlib.h> /* NULL */
#include <assert.h>
#include <time.h> /* nanosleep(3) */
#include <sys/types.h> /* u_char */
#include <sys/time.h> /* struct timeval */
#include <event.h> /* event_init(3) event_loop(3) */
#include <thread.h>
static unsigned int counter;
static void count_null_catch(void *str,enum thread_errno err, void *null) {
return /* void */;
} /* count_null_catch() */
static void *count_null_run(void *str, void *null, unsigned timeout) {
return NULL;
} /* count_null_run() */
static void count_catch(void *str,enum thread_errno err, void *null) {
printf("%s\n", (char *)str);
counter--;
(void)thread_run(&count_null_run, NULL, THREAD_PRI_NORM, &count_null_catch, NULL, 0);
} /* count_catch() */
static void *count_run(void *str, void *null, unsigned timeout) {
struct timespec ts = { 1, 0 };
(void)nanosleep(&ts, 0);
return str;
} /* count_run() */
int main(void) {
const char *list[] = {
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine",
"ten",
NULL
};
const char **str;
int i;
event_init();
assert(0 == thread_init(0, 0));
for (i = 0; i < 3; i++) {
counter = (sizeof list / sizeof *list) - 1;
for (str = list; *str; str++)
(void)thread_run(&count_run, (void *)*str, THREAD_PRI_NORM, &count_catch, NULL, 0);
while (0 == event_loop(EVLOOP_ONCE)) {
if (!(counter > 0))
break;
}
assert(0 == thread_reset(0, 0));
}
return (counter == 0)? EXIT_SUCCESS : EXIT_FAILURE;
} /* main() */
syntax highlighted by Code2HTML, v. 0.9.1