diff options
| author | tylov <[email protected]> | 2023-07-20 15:09:10 +0200 |
|---|---|---|
| committer | tylov <[email protected]> | 2023-07-20 15:12:29 +0200 |
| commit | 900295256d825fc323149cd223c49787f32a3696 (patch) | |
| tree | 6c79cf4209e3975bb6865e2940b9cb56ea469c73 /misc/examples/scheduler.c | |
| parent | 224a04f7fa7549ed94d2a1415eb25829e39a7cca (diff) | |
| download | STC-modified-900295256d825fc323149cd223c49787f32a3696.tar.gz STC-modified-900295256d825fc323149cd223c49787f32a3696.zip | |
Moved examples to sub-directories. Added cotask1.c cotask2.c examples.
Diffstat (limited to 'misc/examples/scheduler.c')
| -rw-r--r-- | misc/examples/scheduler.c | 74 |
1 files changed, 0 insertions, 74 deletions
diff --git a/misc/examples/scheduler.c b/misc/examples/scheduler.c deleted file mode 100644 index 38defd0f..00000000 --- a/misc/examples/scheduler.c +++ /dev/null @@ -1,74 +0,0 @@ -// https://www.youtube.com/watch?v=8sEe-4tig_A -#include <stdio.h> -#include <stc/calgo.h> - -struct Task { - int (*fn)(struct Task*); - int cco_state; - struct Scheduler* sched; -}; - -#define i_type Scheduler -#define i_key struct Task -#include <stc/cqueue.h> - -static bool schedule(Scheduler* sched) -{ - struct Task task = *Scheduler_front(sched); - Scheduler_pop(sched); - - if (!cco_done(&task)) - task.fn(&task); - - return !Scheduler_empty(sched); -} - -static int push_task(const struct Task* task) -{ - Scheduler_push(task->sched, *task); - return CCO_YIELD; -} - - -static int taskA(struct Task* task) -{ - cco_routine(task) { - puts("Hello, from task A"); - cco_yield_v(push_task(task)); - puts("A is back doing work"); - cco_yield_v(push_task(task)); - puts("A is back doing more work"); - cco_yield_v(push_task(task)); - puts("A is back doing even more work"); - } - return 0; -} - -static int taskB(struct Task* task) -{ - cco_routine(task) { - puts("Hello, from task B"); - cco_yield_v(push_task(task)); - puts("B is back doing work"); - cco_yield_v(push_task(task)); - puts("B is back doing more work"); - } - return 0; -} - -void Use(void) -{ - Scheduler scheduler = c_init(Scheduler, { - {.fn=taskA, .sched=&scheduler}, - {.fn=taskB, .sched=&scheduler}, - }); - - while (schedule(&scheduler)) {} - - Scheduler_drop(&scheduler); -} - -int main(void) -{ - Use(); -} |
