diff options
Diffstat (limited to 'src/engine/e_jobs.h')
| -rw-r--r-- | src/engine/e_jobs.h | 33 |
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); |