10#define THREADTASKS 256
12#define THREADSLEEPCOUNT 1000
14typedef struct taskqueue_state_thread_s
27typedef struct taskqueue_state_s
80 unsigned int sleepcounter = 0;
120 for (
i = 0;
i < numtasks;
i++)
122 if (tasks[
i].yieldcount == 0)
216 unsigned long long int avg;
218 int numthreads = maxthreads;
284 memset(t, 0,
sizeof(*t));
295 size_t numtasks = t->
i[0];
300 if (!tasks[numtasks - 1].done)
#define CF_SERVER
cvar/command that only the server can change/execute
#define CF_CLIENT
cvar/command that only the client can change/execute
#define CF_ARCHIVE
cvar should have its set value saved to config.cfg and persist across sessions
void Cvar_RegisterVariable(cvar_t *variable)
registers a cvar that already has the name, string, and optionally the archive elements set.
#define bound(min, num, max)
unsigned int tasks_thisframe
unsigned int queue_enqueueposition
unsigned int tasks_averageperframe
taskqueue_state_thread_t threads[MAXTHREADS]
taskqueue_task_t ** queue_data
Thread_SpinLock command_lock
unsigned int tasks_recentframes[RECENTFRAMES]
unsigned int tasks_recentframesindex
unsigned int enqueuethread
unsigned int queue_dequeueposition
unsigned int enqueueposition
unsigned int dequeueposition
unsigned int tasks_completed
unsigned int thread_index
taskqueue_task_t * queue[THREADTASKS]
struct taskqueue_task_s * preceding
void(* func)(struct taskqueue_task_s *task)
double Sys_Sleep(double time)
called to yield for a little bit so as not to hog cpu when paused or debugging
cvar_t taskqueue_minthreads
void TaskQueue_Frame(qbool shutdown)
void TaskQueue_Yield(taskqueue_task_t *t)
static int TaskQueue_ThreadFunc(void *d)
cvar_t taskqueue_maxthreads
void TaskQueue_WaitForTaskDone(taskqueue_task_t *t)
qbool TaskQueue_IsDone(taskqueue_task_t *t)
void TaskQueue_Shutdown(void)
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)
static taskqueue_state_t taskqueue_state
void TaskQueue_Init(void)
void TaskQueue_Enqueue(int numtasks, taskqueue_task_t *tasks)
static void TaskQueue_ExecuteTask(taskqueue_task_t *t)
static void TaskQueue_DistributeTasks(void)
void TaskQueue_Task_CheckTasksDone(taskqueue_task_t *t)
cvar_t taskqueue_tasksperthread
#define Thread_AtomicUnlock(lock)
#define Thread_WaitThread(thread, retval)
#define Thread_AtomicLock(lock)
#define Thread_CreateThread(fn, data)
#define Mem_Realloc(pool, data, size)