blob: fb210a2807a0707f4631752238c8c06b72a1637f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#pragma once
#include <stdlib.h>
#include <coro.h>
namespace Balau {
class TaskMan;
class Task {
public:
enum Status {
STARTING,
RUNNING,
IDLE,
STOPPED,
FAULTED,
};
Task();
virtual ~Task();
virtual const char * getName() = 0;
Status getStatus() { return status; }
protected:
void suspend();
virtual void Do() = 0;
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;
};
};
|