小弟最近在做那个哲学家吃饭的问题,其中想将其中的一个任务的优先级提高,但是用taskPrioritySet()函数对任务的优先级进行提升,但是一直都提示说对任务的优先级设置失败,请问有什么原因导致这种优先级设置失败呢?
------解决方案--------------------------------------------------------
你看一下错误号,errno 。
------解决方案--------------------------------------------------------
程序编译执行都没有报错,但是返回值一直都是ERROR,也就是设置程序的优先级不成功,所以一直很困惑,不知道是什么原因导致优先级设置不成功。
------解决方案--------------------------------------------------------
下面任务的源代码,执行的时候输出的结果一直是Set task ph1 priority failed!
int record()
{
stMsg myMsg;
int i=100,j;
while(i--)
{
msgQReceive(msgQueID,(char *)&myMsg,sizeof(myMsg),WAIT_FOREVER);//等待消息的到来
if(MSG_PH == myMsg.msgType)
{
printf("ph%d eating!\t",myMsg.phID);
phWaitTime[myMsg.phID]=-1; //等待时间设置为-1,因为后面还要加1
}
else if(MSG_WD == myMsg.msgType) //接收到看门狗的消息
{
printf("\n");
for(j=0 ; j<5 ; j++)
{
phWaitTime[j]++; //等待时间加1
if(10 == phWaitTime[j]) //判断哲学家j是否被饿死
{
printf("Philosopher %d died!\n",j);
return ERROR;
}
if(9 == phWaitTime[j]) //将要饿死的哲学家的优先级提高
{
if(ERROR == taskPrioritySet(tID[j],HIGH_PRI));//判断是否设置失败
{
printf("Set task ph%d priority failed!\n",j);
return ERROR;
}
}
printf("ph%d waiting time:%d\n",j,phWaitTime[j]);//输出等待时间
}
printf("\n");
}
else
{
printf("Unexpected message!\n");
}
}
return OK;
}
------解决方案--------------------------------------------------------
执行int errnoGet (void)函数获得错误号,看看错误号是否有有用的提示。
if(ERROR == taskPrioritySet(tID[j],HIGH_PRI));//判断是否设置失败
{
printf("Set task ph%d priority failed, errno=0x%08x!\n",j, errnoGet());
return ERROR;
}
------解决方案--------------------------------------------------------
谢谢TTerrenceLan,
用了你的方法试了一下,其中的errnoGet()的返回值为0,表示没有错误。
------解决方案--------------------------------------------------------
大家都是高手啊
我也得向你们学下