此方法會起始設定 RiCOSTask 物件。
RiCBoolean RiCOSTask_init (RiCOSTask *const me,
RiCOSTaskEndCallBack tfunc, void *param,
const char *name, const long stackSize);
me
要起始設定的 RiCOSTask 物件
tfunc
結束現行作業系統作業的回呼函數
param
回呼函數的參數
名稱
任務名稱
stackSize
堆疊的大小
如果成功,此方法會傳回 RiCTRUE。
RiCBoolean RiCOSTask_init(RiCOSTask * const me,
RiCOSTaskEndCallBack tfunc, void * param,
const char * name, const long stackSize)
{
size_t i, len = 0;
char* myName = NULL;
if (me == NULL) {return 0;}
me->endOSTaskInCleanup = TRUE;
me->isWrapperThread = 0;
/* 複製執行緒名稱。 */
if (name != NULL) len = strlen(name);
/* 檢查名稱是否合法 */
for (i = 0; i < len; i++) {
if ((isalnum((int)name[i]) == 0) &&
(name[i] != '_')) {
len = 0;
break;
}
}
if (len > 0) {
myName = malloc(len + 1);
strcpy(myName, name);
}
RiCOSEventFlag_init(&me->m_SuspEventFlag);
RiCOSEventFlag_reset(&me->m_SuspEventFlag);
/* 建立已暫停的執行緒!!!!!! */
me->m_ExecFunc = tfunc;
me->m_ExecParam = param;
me->hThread = 0;
me->hThread = taskSpawn(myName,
/* 新作業的名稱(儲存在 pStackBase) */
(int) PRIORITY_NORMAL, /* 新作業的優先順序 */
0, /* 作業選項單字 */
(int)stackSize, /* 所需的堆疊大小(位元組數) */
(int (*)())preExecFunc, /* 執行緒函數 */
(int)(void *)me, /* 執行緒函數的引數 */
0,0,0,0,0,0,0,0,0);
return 1;}