summaryrefslogtreecommitdiffhomepage
path: root/misc/examples/scheduler.c
diff options
context:
space:
mode:
authortylov <[email protected]>2023-07-20 15:09:10 +0200
committertylov <[email protected]>2023-07-20 15:12:29 +0200
commit900295256d825fc323149cd223c49787f32a3696 (patch)
tree6c79cf4209e3975bb6865e2940b9cb56ea469c73 /misc/examples/scheduler.c
parent224a04f7fa7549ed94d2a1415eb25829e39a7cca (diff)
downloadSTC-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.c74
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();
-}