about summary refs log tree commit diff
path: root/src/engine/e_jobs.h
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2008-09-07 21:13:24 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2008-09-07 21:13:24 +0000
commit3b086d616a9090f714c90c7985f10c5dc4bd5733 (patch)
tree8137021d446260adfc5eacd753f9e42ab5281e7d /src/engine/e_jobs.h
parent6a4e17ea8520e9eb3a88ce15a9e337679d631775 (diff)
downloadzcatch-3b086d616a9090f714c90c7985f10c5dc4bd5733.tar.gz
zcatch-3b086d616a9090f714c90c7985f10c5dc4bd5733.zip
fixed threaded jobs
Diffstat (limited to 'src/engine/e_jobs.h')
-rw-r--r--src/engine/e_jobs.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/engine/e_jobs.h b/src/engine/e_jobs.h
new file mode 100644
index 00000000..2b04a1e4
--- /dev/null
+++ b/src/engine/e_jobs.h
@@ -0,0 +1,33 @@
+
+typedef int (*JOBFUNC)(void *data);
+
+typedef struct JOB
+{
+	struct JOBPOOL *pool;
+	struct JOB *prev;
+	struct JOB *next;
+	volatile int status;
+	volatile int result;
+	JOBFUNC func;
+	void *func_data;
+} JOB;
+
+typedef struct JOBPOOL
+{
+	LOCK lock;
+	JOB *first_job;
+	JOB *last_job;
+} JOBPOOL;
+
+enum
+{
+	JOBSTATUS_PENDING=0,
+	JOBSTATUS_RUNNING,
+	JOBSTATUS_DONE
+	/*JOBSTATUS_ABORTING,*/
+	/*JOBSTATUS_ABORTED,*/
+};
+
+int jobs_initpool(JOBPOOL *pool, int num_threads);
+int jobs_add(JOBPOOL *pool, JOB *job, JOBFUNC func, void *data);
+int jobs_status(JOB *job);