2 #ifndef __WVWIN32TASK_H
3 #define __WVWIN32TASK_H
6 #include "wvlinklist.h"
10 #define WVTASK_MAGIC 0x123678
17 typedef void TaskFunc(
void *userdata);
19 static int taskcount, numtasks, numrunning;
20 int magic_number, *stack_magic;
25 bool running, recycled;
33 static VOID CALLBACK MyFiberProc(PVOID lpParameter);
39 void start(WvStringParm _name, TaskFunc *_func,
void *_userdata);
40 bool isrunning()
const
43 int get_tid()
const {
return tid; }
44 WvString get_name()
const {
return name; }
58 static int magic_number;
59 static WvTaskList free_tasks;
61 static void get_stack(
WvTask &task,
size_t size);
62 static void stackmaster();
63 static void _stackmaster();
64 static void do_task();
66 static WvTask *stack_target;
68 static WvTask *current_task;
69 static LPVOID toplevel;
79 WvTask *start(WvStringParm name,
80 WvTask::TaskFunc *func,
void *userdata,
81 size_t stacksize = 256*1024);
85 static int run(
WvTask &task,
int val = 1);
86 static int yield(
int val = 1);
89 {
return current_task; }
92 #endif // __WVWIN32TASK_H