00001 00061 #ifndef DKUTIL_C_TASK_ENGINE_H 00062 #define DKUTIL_C_TASK_ENGINE_H 00063 00064 00065 #include <stdio.h> 00066 #include <string.h> 00067 #include "dkcOSIndependent.h" 00068 00069 /* 00070 00071 00072 */ 00074 #define dkcdTASK_NUM 256 00075 00080 00081 typedef BYTE TASK_COUNT_T; 00082 00083 00085 typedef struct dkc_TaskEngine{ 00087 BYTE *mTaskPool[dkcdTASK_NUM]; 00089 BYTE *mTaskWorkPool[dkcdTASK_NUM]; 00091 size_t mTaskWorkSize; 00093 TASK_COUNT_T mNowPriority; 00094 }DKC_TASK_ENGINE; 00095 00097 typedef struct dkc_Task{ 00099 BYTE *work; 00101 void (*proc)(DKC_TASK_ENGINE *,struct dkc_Task *); 00102 }DKC_TASK; 00103 00104 00105 typedef void (*DKC_TASK_PROC)(DKC_TASK_ENGINE *,DKC_TASK *); 00106 00107 00108 00109 00110 00111 00112 DKC_EXTERN DKC_TASK_ENGINE *dkcAllocTaskEngine(size_t taskworksize); 00113 00114 DKC_EXTERN int dkcFreeTaskEngine(DKC_TASK_ENGINE **); 00123 00124 DKC_EXTERN void dkcTaskEngineInit(DKC_TASK_ENGINE *p,DKC_TASK *TaskPool[dkcdTASK_NUM],BYTE *TaskWorkPool[dkcdTASK_NUM]); 00125 00127 DKC_EXTERN int dkcTaskEngineSet(DKC_TASK_ENGINE *p,TASK_COUNT_T prio,DKC_TASK_PROC proc); 00129 DKC_EXTERN int dkcTaskEngineKill(DKC_TASK_ENGINE *p,TASK_COUNT_T prio); 00131 DKC_EXTERN int dkcTaskEngineIteration(DKC_TASK_ENGINE *p); 00132 00134 DKC_EXTERN BOOL dkcTaskEngineEmpty(DKC_TASK_ENGINE *p,TASK_COUNT_T prio); 00135 00136 00137 #if !defined( DKUTIL_C_TASK_ENGINE_C ) && defined(USE_DKC_INDEPENDENT_INCLUDE) 00138 # include "dkcTaskEngine.c" 00139 #endif 00140 00141 00142 00143 #endif //end of include once