Mercurial > hg > Game > CbCTaskManager
diff examples/treedependtask/testmanager.cbc @ 8:07fab8c367b2
made src directory and move all source files into it.
support autocont and automake tools.
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 08 Jan 2010 14:40:49 +0900 |
parents | |
children | f06fb0370caf |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/treedependtask/testmanager.cbc Fri Jan 08 14:40:49 2010 +0900 @@ -0,0 +1,76 @@ +#include <stdio.h> +#include <stdlib.h> + +#include "CbCTaskManager.h" +#include "taskinit.h" + +#define __DEBUG(f, args...) \ + fprintf(stderr, "in %s: "f, __FUNCTION__, ## args) + + + + +/* it may be moved to TaskManager side. */ +__code nojob(void *manager, void *rbuff, void *wbuff) +{ + goto scheduler(manager, ENDTASK, NULL, NULL); +} + + +extern __code taskA_0(UserManager *, void *, void *); +extern __code taskA_1(UserManager *, void *, void *); +extern __code taskA_2(UserManager *, void *, void *); + + +#define NUM 16 + +/* + * TASKs. + */ +__code starttask(UserManager *manager, void *rbuff, void *wbuff) +{ + UserTask *tasks[NUM]; + __DEBUG("s=%p, rb=%p, wb=%p\n", manager, rbuff, wbuff); + int i; + for (i=0; i<NUM; i++) { + tasks[i] = createTask(TASK_A, NULL); + taskSetData(tasks[i], (void*)i, i, NULL,0); + } + taskSetWait(tasks[0], tasks[1]); + for (i=1; 2*i<NUM; i++) { + taskSetWait(tasks[i], tasks[2*i]); + if (2*i+1<NUM) + taskSetWait(tasks[i], tasks[2*i+1]); + } + for (i=0; i<NUM; i++) { + taskSpawn(manager, tasks[i]); + } + goto scheduler(manager, ENDTASK, NULL, NULL); +} + +__code taskA(UserManager *manager, void *rbuff, void *wbuff) +{ + __DEBUG("s=%p, rb=%p, wb=%p\n", manager, rbuff, wbuff); + goto scheduler(manager, taskA_0, NULL, NULL); +} +__code taskA_0(UserManager *manager, void *rbuff, void *wbuff) +{ + __DEBUG("s=%p, rb=%p, wb=%p\n", manager, rbuff, wbuff); + goto scheduler(manager, taskA_1, NULL, NULL); +} +__code taskA_1(UserManager *manager, void *rbuff, void *wbuff) +{ + __DEBUG("s=%p, rb=%p, wb=%p\n", manager, rbuff, wbuff); + goto scheduler(manager, taskA_2, NULL, NULL); +} +__code taskA_2(UserManager *manager, void *rbuff, void *wbuff) +{ + __DEBUG("s=%p, rb=%p, wb=%p\n", manager, rbuff, wbuff); + goto scheduler(manager, ENDTASK, NULL, NULL); +} + +__code taskB(UserManager *manager, void *rbuff, void *wbuff) +{ + __DEBUG("s=%p, rb=%p, wb=%p\n", manager, rbuff, wbuff); + goto scheduler(manager, taskA_0, NULL, NULL); +}