--- libaitsched/example/test_basic.c 2014/01/28 11:58:12 1.1 +++ libaitsched/example/test_basic.c 2014/01/28 13:17:33 1.2 @@ -0,0 +1,191 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "../inc/config.h" +#include + +intptr_t Kill; + +void *event(sched_task_t *arg) +{ + printf("Event::\n"); + taskExit(arg, NULL); +} + +void *regular(sched_task_t *arg) +{ + printf("Task::\n"); + taskExit(arg, NULL); +} + +void *timer(sched_task_t *arg) +{ + printf("Timer %p sec::\n", TASK_ARG(arg)); + taskExit(arg, NULL); +} + +void *r(sched_task_t *arg) +{ + int rlen; + char buf[BUFSIZ] = { [0 ... BUFSIZ - 1] = 0 }; + + rlen = read(TASK_FD(arg), buf, sizeof buf); + printf("read:: %d bytes readed = %s\n", rlen, buf); + Kill++; + taskExit(arg, NULL); +} + +void *w(sched_task_t *arg) +{ + printf("write:: test\n"); + taskExit(arg, NULL); +} + +void *once(sched_task_t *arg) +{ + printf("once::\n"); + taskExit(arg, NULL); +} + +void *thr(sched_task_t *arg) +{ + printf("tid (%lx):: %s\n", TASK_VAL(arg), __func__); + taskExit(arg, 42); +} + +void *thr4kill(sched_task_t *arg) +{ + char blah[BUFSIZ]; + + printf("tid (%lx):: %s\n", TASK_VAL(arg), __func__); + + read(0, blah, sizeof blah); + printf("never see!!! (%lx):: %s (%d == %d)\n", TASK_VAL(arg), (char*) TASK_ARG(arg), TASK_TYPE(arg), taskTHREAD); + taskExit(arg, 0); +} + +void sig(int s) +{ + switch (s) { + case SIGTERM: + Kill++; + break; + } +} + +int +main(int argc, char **argv) +{ + sched_root_task_t *root; + int f; + struct sockaddr_in sin; + struct timespec ts = { 20, 0 }; +// struct timespec p = { 0, 10000000 }; + struct sigaction sa; + sched_task_t *t; + + sa.sa_handler = sig; + sigemptyset(&sa.sa_mask); + sigaction(SIGTERM, &sa, NULL); + + f = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (f == -1) + return 1; + sin.sin_len = sizeof sin; + sin.sin_family = AF_INET; + sin.sin_port = htons(2345); + sin.sin_addr.s_addr = INADDR_ANY; + if (bind(f, (struct sockaddr*) &sin, sizeof sin) == -1) + return 1; + + root = schedBegin(); + if (!root) { + printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError()); + return 1; + } + + if (!schedTimer(root, timer, (void*) (intptr_t) ts.tv_sec, ts, NULL, 0)) { + printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError()); + return 4; + } else + ts.tv_sec = 15; + if (!schedTimer(root, timer, (void*) (intptr_t) ts.tv_sec, ts, NULL, 0)) { + printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError()); + return 4; + } else + ts.tv_sec = 10; + + if (!schedEvent(root, event, "piuk", 1234, NULL, 0)) { + printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError()); + return 2; + } + + if (!schedTask(root, regular, "piuk", 1111, NULL, 0)) { + printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError()); + return 3; + } + + if (!schedTimer(root, timer, (void*) (intptr_t) ts.tv_sec, ts, NULL, 0)) { + printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError()); + return 4; + } + + if (!schedRead(root, r, "rrr", f, NULL, 0)) { + printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError()); + return 5; + } + + if (!schedWrite(root, w, "www", f, NULL, 0)) { + printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError()); + return 6; + } + + if (!(t = schedThread(root, thr4kill, "0aaaa", 0, NULL, 0))) { + printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError()); + return 7; + } + if (!schedThread(root, thr, "mdaaaa this is thread task", 8192, NULL, 0)) { + printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError()); + return 7; + } + if (!schedThread(root, thr, "mdaaaa this is thread task -detached", 131072, NULL, 0)) { + printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError()); + return 7; + } + if (!schedThread(root, thr, "mdaaaa this is thread task -j", 0, NULL, 0)) { + printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError()); + return 7; + } + printf("try to cancel tid = %lx\n", TASK_VAL(t)); + schedCancel(t); + if (!schedThread(root, thr, "mdaaaa this is thread task -j2", 0, NULL, 0)) { + printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError()); + return 7; + } + if (!(t = schedThread(root, thr4kill, "0aaaa", 0, NULL, 0))) { + printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError()); + return 7; + } + if (!schedThread(root, thr, "mdaaaa this is thread task -j3", 4096, NULL, 0)) { + printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError()); + return 7; + } + sleep(1); + schedCancel(t); + + schedCallOnce(root, once, "000000", 42, NULL, 0); + +// schedPolling(root, &p, NULL); + schedRun(root, &Kill); + schedEnd(&root); + + close(f); + return 0; +}