如何判断一个tsk任务结束
做项目遇到一个问题,来了一个A请求后,装置M要进行A的check,而check条件有一条是B的任务tsk不在执行状态,恰巧来A请求时,装置M正在做B动作,所以导致A的check没过,不能继续处理A的动作。然后我想到的办法是在B动作做完后再重新调一下A的check处理,这样就能check过。但是这么做就要判断B动作何时结束,B动作是一个tsk,一直在挂着,我就在tsk里加了个flg,然后写个方法去一直判断flg值,变了就说明tsk做完了,void ReceiveMessage(unsigned short GG){
...
switch(GG){
case : A
Acheck();
break;
case : C
B();
break;
default:
break;
}
}
void B(){
DoB();
ext_tsk();
}
我的做法是:
bool flg=true;
void B(){
DoB();
flg=false;
ext_tsk();
}
void D(){
while(1){
if(flg==false){
Acheck();
flg=true;
break;
}
dly_tsk( 100 );
}
}
void ReceiveMessage(unsigned short GG){
...
switch(GG){
case : A
Acheck();
break;
case : C
B();
D();
break;
default:
break;
}
}
这样做编译是没问题,但是用while循环占内存,dly_tsk( 100 )不知道会不会实现释放内存?然后while循环会不会造成死循环严重bug?所以说各位大神还有没有更好的办法?