メインページ | アルファベット順一覧 | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

dkcTaskEngine.c

説明を見る。
00001 
00008 #define DKUTIL_C_TASK_ENGINE_C
00009 #include "dkcTaskEngine.h"
00010 
00011 DKC_TASK_ENGINE *dkcAllocTaskEngine(size_t taskworksize){
00012     BYTE *temp = NULL;
00013 
00014     DKC_TASK_ENGINE *p = NULL;
00015     DKC_TASK *tp = NULL;
00016 
00017     if(0==taskworksize){
00018         return NULL;
00019     }
00020 
00021 
00022     
00023     p = dkcAllocate(sizeof(DKC_TASK_ENGINE));
00024     if(NULL==p){
00025         return NULL;
00026     }
00027 
00028     temp = dkcAllocate(taskworksize * dkcdTASK_NUM);
00029     if(NULL==temp){
00030         goto Error;
00031     }
00032     tp = dkcAllocate(sizeof(DKC_TASK) * dkcdTASK_NUM);
00033     if(NULL==tp){
00034         goto Error;
00035     }
00036 
00037 
00038 
00039     dkcTaskEngineInit(p,&tp,&temp);
00040 
00041     return p;
00042 
00043 
00044 Error:
00045     //dkcFree((void **)&tp);
00046     dkcFree((void **)&temp);
00047     dkcFree((void **)&p);
00048 
00049     return NULL;
00050 }
00051 
00052 int dkcFreeTaskEngine(DKC_TASK_ENGINE **pp){
00053     dkcFree((void **) (*pp)->mTaskPool );//&[0]
00054     dkcFree((void **) (*pp)->mTaskWorkPool );//&[0]
00055     return dkcFree((void **) pp );
00056 }
00057 
00058 static void Return(DKC_TASK_ENGINE *a,DKC_TASK *b)
00059 {
00060     return;
00061 }
00062 
00063 void dkcTaskEngineInit(DKC_TASK_ENGINE *p,DKC_TASK *TaskPool[dkcdTASK_NUM],BYTE *TaskWorkPool[dkcdTASK_NUM]){
00064     int i;
00065     size_t taskworksize = p->mTaskWorkSize;
00066     p->mNowPriority = 0;
00067     
00068     for(i=0;i<dkcdTASK_NUM;i++){
00069         p->mTaskWorkPool[i] = TaskWorkPool[i * taskworksize];
00070         
00071         TaskPool[i]->proc = Return;
00072         TaskPool[i]->work = p->mTaskWorkPool[i];
00073 
00074         p->mTaskPool[i] = (BYTE *)TaskPool[i];
00075     }
00076 }
00077 
00079 int dkcTaskEngineSet(DKC_TASK_ENGINE *p,TASK_COUNT_T prio,DKC_TASK_PROC proc){
00080     DKC_TASK_PROC sentinel = Return;
00081     DKC_TASK *pt = (DKC_TASK *)p->mTaskPool[prio];
00082 
00083     if(pt->proc != sentinel)
00084     {   //使用している。
00085         return edk_FAILED;
00086     }
00087 
00088     //使用していないなら登録
00089     pt->proc = proc;
00090 
00091     return edk_SUCCEEDED;
00092 }
00093 
00095 int dkcTaskEngineKill(DKC_TASK_ENGINE *p,TASK_COUNT_T prio)
00096 {
00097     DKC_TASK *pt = (DKC_TASK *)p->mTaskPool[prio];
00098 
00099     pt->proc  = Return;
00100     return edk_SUCCEEDED;
00101 }
00102 
00104 int dkcTaskEngineIteration(DKC_TASK_ENGINE *p){
00105     unsigned int i;
00106     //一時変数
00107     DKC_TASK_PROC proc;
00108     DKC_TASK *task_p;
00109 
00110     for(i=0;i<dkcdTASK_NUM;i++){
00111         task_p = (DKC_TASK *)(p->mTaskPool[i]);
00112         proc = task_p->proc;
00113         p->mNowPriority = (TASK_COUNT_T)i;
00114         
00115         //呼び出す。
00116         proc(p,task_p);
00117 
00118     }
00119     return edk_SUCCEEDED;
00120 
00121 }
00122 
00123 
00125 BOOL dkcTaskEngineEmpty(DKC_TASK_ENGINE *p,TASK_COUNT_T prio){
00126     DKC_TASK_PROC tp = Return;
00127     DKC_TASK *task_p = (DKC_TASK *)p->mTaskPool[prio];
00128 
00129     return (task_p->proc==tp);
00130 }
00131 
00132 
00133 
00134 
00135 

dkutil_cに対してSat Sep 10 09:23:57 2005に生成されました。  doxygen 1.4.4