summaryrefslogtreecommitdiff
path: root/includes/Task.h
diff options
context:
space:
mode:
Diffstat (limited to 'includes/Task.h')
-rw-r--r--includes/Task.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/includes/Task.h b/includes/Task.h
new file mode 100644
index 0000000..314532b
--- /dev/null
+++ b/includes/Task.h
@@ -0,0 +1,38 @@
+#pragma once
+
+#include <stdlib.h>
+#include <coro.h>
+
+namespace Balau {
+
+class TaskMan;
+
+class Task {
+ public:
+ enum Status {
+ STARTING,
+ RUNNING,
+ IDLE,
+ STOPPED,
+ FAULTED,
+ };
+ Task();
+ ~Task() { free(stack); free(tls); }
+ virtual void Do() = 0;
+ virtual const char * getName() = 0;
+ Status getStatus() { return status; }
+ protected:
+ void suspend();
+ private:
+ size_t stackSize() { return 128 * 1024; }
+ void switchTo();
+ static void coroutine(void *);
+ void * stack;
+ coro_context ctx;
+ TaskMan * taskMan;
+ Status status;
+ void * tls;
+ friend class TaskMan;
+};
+
+};