diff options
Diffstat (limited to 'includes/Task.h')
-rw-r--r-- | includes/Task.h | 38 |
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; +}; + +}; |