WvStreams
debian/libwvstreams-dev/usr/include/wvstreams/wvwin32task.h
1/* -*- Mode: C++ -*- */
2#ifndef __WVWIN32TASK_H
3#define __WVWIN32TASK_H
4
5#include "wvstring.h"
6#include "wvlinklist.h"
7
8#include <windows.h>
9
10#define WVTASK_MAGIC 0x123678
11
12class WvTaskMan;
13
14class WvTask
15{
16 friend class WvTaskMan;
17 typedef void TaskFunc(void *userdata);
18
19 static int taskcount, numtasks, numrunning;
20 int magic_number, *stack_magic;
21 WvString name;
22 int tid;
23
24 size_t stacksize;
25 bool running, recycled;
26
27 WvTaskMan &man;
28 LPVOID mystate; // used for resuming the task
29
30 TaskFunc *func;
31 void *userdata;
32
33 static VOID CALLBACK MyFiberProc(PVOID lpParameter);
34 WvTask(WvTaskMan &_man, size_t _stacksize = 64*1024);
35
36public:
37 virtual ~WvTask();
38
39 void start(WvStringParm _name, TaskFunc *_func, void *_userdata);
40 bool isrunning() const
41 { return running; }
42 void recycle();
43 int get_tid() const { return tid; }
44 WvString get_name() const { return name; }
45};
46
47
48DeclareWvList(WvTask);
49
51class WvTaskMan
52{
53 friend class WvTask;
54
55 static WvTaskMan *singleton;
56 static int links;
57
58 static int magic_number;
59 static WvTaskList free_tasks;
60
61 static void get_stack(WvTask &task, size_t size);
62 static void stackmaster();
63 static void _stackmaster();
64 static void do_task();
65
66 static WvTask *stack_target;
67
68 static WvTask *current_task;
69 static LPVOID toplevel;
70
71 WvTaskMan();
72 virtual ~WvTaskMan();
73
74public:
76 static WvTaskMan *get();
77 static void unlink();
78
79 WvTask *start(WvStringParm name,
80 WvTask::TaskFunc *func, void *userdata,
81 size_t stacksize = 256*1024);
82
83 // run() and yield() return the 'val' passed to run() when this task
84 // was started.
85 static int run(WvTask &task, int val = 1);
86 static int yield(int val = 1);
87
88 static WvTask *whoami()
89 { return current_task; }
90};
91
92#endif // __WVWIN32TASK_H
A WvFastString acts exactly like a WvString, but can take (const char *) strings without needing to a...
WvString is an implementation of a simple and efficient printable-string class.
Provides co-operative multitasking support among WvTask instances.
static WvTaskMan * get()
get/dereference the singleton global WvTaskMan
Represents a single thread of control.