DarkPlaces
Game engine based on the Quake 1 engine by id Software, developed by LadyHavoc
 
taskqueue.h
Go to the documentation of this file.
1
2#ifndef TASKQUEUE_H
3#define TASKQUEUE_H
4
5#include <stddef.h>
6#include "qtypes.h"
7
8typedef struct taskqueue_task_s
9{
10 // if not NULL, this task must be done before this one will dequeue (faster than simply calling TaskQueue_Yield immediately)
11 struct taskqueue_task_s *preceding;
12
13 // use TaskQueue_IsDone() to poll done status
14 volatile int done;
15
16 // function to call, and parameters for it to use
17 void(*func)(struct taskqueue_task_s *task);
18 // general purpose parameters
19 void *p[2];
20 size_t i[2];
21
22 unsigned int yieldcount; // number of times this task has been requeued - each task counts only once for purposes of tasksperthread averaging
23}
25
26// queue the tasks to be executed, but does not start them (until TaskQueue_WaitforTaskDone is called)
27void TaskQueue_Enqueue(int numtasks, taskqueue_task_t *tasks);
28
29// if the task can not be completed due yet to preconditions, just enqueue it again...
31
32// polls for status of task and returns the result, does not cause tasks to be executed (see TaskQueue_WaitForTaskDone for that)
34
35// triggers execution of queued tasks, and waits for the specified task to be done
37
38// convenience function for setting up a task structure. Does not do the Enqueue, just fills in the struct.
39void TaskQueue_Setup(taskqueue_task_t *t, taskqueue_task_t *preceding, void(*func)(taskqueue_task_t *), size_t i0, size_t i1, void *p0, void *p1);
40
41// general purpose tasks
42// t->i[0] = number of tasks in array
43// t->p[0] = array of taskqueue_task_t to check
45
46void TaskQueue_Init(void);
47void TaskQueue_Shutdown(void);
48void TaskQueue_Frame(qbool shutdown);
49
50#endif
void() predraw
int i
bool qbool
Definition qtypes.h:9
struct taskqueue_task_s * preceding
Definition taskqueue.h:11
volatile int done
Definition taskqueue.h:14
unsigned int yieldcount
Definition taskqueue.h:22
void TaskQueue_Frame(qbool shutdown)
Definition taskqueue.c:213
void TaskQueue_Yield(taskqueue_task_t *t)
Definition taskqueue.c:133
void TaskQueue_WaitForTaskDone(taskqueue_task_t *t)
Definition taskqueue.c:199
qbool TaskQueue_IsDone(taskqueue_task_t *t)
Definition taskqueue.c:139
void TaskQueue_Shutdown(void)
Definition taskqueue.c:60
void TaskQueue_Setup(taskqueue_task_t *t, taskqueue_task_t *preceding, void(*func)(taskqueue_task_t *), size_t i0, size_t i1, void *p0, void *p1)
Definition taskqueue.c:282
void TaskQueue_Init(void)
Definition taskqueue.c:53
void TaskQueue_Enqueue(int numtasks, taskqueue_task_t *tasks)
Definition taskqueue.c:105
void TaskQueue_Task_CheckTasksDone(taskqueue_task_t *t)
Definition taskqueue.c:293