INT8U time = 0; /*全局变量*/
.....
void DispCharM (void *pdata) /* 在 DispCharM 中请求删除 DispCharY */
{
........
char* DelYTask = "MTask: YTask,you must delete youslef!"; /*提示信息*/
time += 1;
PC_DispChar( x, y, *(char *)pdata, DISP_FGND_WHITE);
if( time > 10 ){ /*运行10次然后发出删除 DispCharY 的请求*/
if( OSTaskDelReq(1) != OS_TASK_NOT_EXIST ){ /*如果任务还没被删除则循环等待*/
PC_DispStr( 10, 8, DelYTask, DISP_FGND_YELLOW + DISP_BGND_BLUE);
OSTimeDly(1); /*每次等待一个时钟周期,如果系统负荷较重,可以等待2个时钟周期*/
}
}
........
}
void DispCharY(void *pdata)
{
.... .... ....
char* s1 = "DispCharY: I have to delete myself now!";
char* s2 = "DispCharY: I have been deleted myself!"; /*定义两条提示信息*/
if( OSTaskDelReq(OS_PRIO_SELF) == OS_TASK_DEL_REQ ){ /*哦,发现有别人请求删除我*/
PC_DispStr(10,10,s1,DISP_FGND_WHITE + DISP_BGND_BLACK);
PC_DispStr(10,12,s2,DISP_FGND_WHITE + DISP_BGND_BLACK); /*显示提示信息*/
OSTaskDel( OS_PRIO_SELF ); /*删除自己*/
.... .... ....
}
注意:这里只是简单的进行删除 DispCharY 自己;如果DispCharY 占用信号量以及相关的系统资源,那必须先释放这些资源后才可以将自身删除掉。
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) | Powered by Discuz! X3.2 |