From 5a283e5b2b523d53e3504292c386b534dc74386a Mon Sep 17 00:00:00 2001 From: Pixel Date: Fri, 7 Oct 2011 09:27:04 -0700 Subject: Preliminary work for the Task manager. Added libcoro submodule. Also refactored some pieces of code. --- includes/Task.h | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 includes/Task.h (limited to 'includes/Task.h') 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 +#include + +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; +}; + +}; -- cgit v1.2.3