WvStreams
include
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
12
class
WvTaskMan
;
13
14
class
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
36
public
:
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
48
DeclareWvList(
WvTask
);
49
51
class
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
74
public
:
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
WvTaskMan
Provides co-operative multitasking support among WvTask instances.
Definition:
wvtask.h:81
WvTask
Represents a single thread of control.
Definition:
wvtask.h:35
WvString
WvString is an implementation of a simple and efficient printable-string class.
Definition:
wvstring.h:330
WvTaskMan::get
static WvTaskMan * get()
get/dereference the singleton global WvTaskMan
WvFastString
A WvFastString acts exactly like a WvString, but can take (const char *) strings without needing to a...
Definition:
wvstring.h:94
Generated by
1.8.18