【发布时间】:2015-08-22 06:47:18
【问题描述】:
这是 omnet++ 手册第 4 章第 4.10 条中的示例。
我猜,在handleMessage 方法中,msg 没有正确安排。在case FSM_Exit(active): 状态中显示错误消息。但是消息怎么可能不是startstopburst 和sendmessage?
void wirelessnode::handleMessage(cMessage *msg)
{
FSM_Switch(fsm)
{
case FSM_Exit(init):
FSM_Goto(fsm,sleep);
break;
case FSM_Enter(sleep):
scheduleAt(simTime()+exponential(sleepTimeMean),startstop);
break;
case FSM_Exit(sleep):
scheduleAt(simTime()+exponential(burstTimeMean),startstop);
if(msg!=startstop)
{
error("Invalid event in state ACTIVE in FSM_Exit(sleep) state ");
}
FSM_Goto(fsm,active);
break;
case FSM_Enter(active):
scheduleAt(simTime()+exponential(sendIATime),sendmsg);
break;
case FSM_Exit(active):
if(msg==sendmsg)
{
FSM_Goto(fsm,snd);
}
else if(msg==startstop)
{
cancelEvent(sendmsg);
FSM_Goto(fsm,sleep);
}
else
{
error("invalid event in state ACTIVE in FSM_Exit(active) state ");
//FSM_Goto(fsm,active);
}
break;
case FSM_Exit(snd):
{
char msgname[32];
sprintf(msgname,"job-%d",++i);
ev <<"Generating"<< msgname <<endl;
cMessage *job=new cMessage(msgname);
// job->SetBitLength ( (long) *msglength );
job->setTimestamp();
int gateCount=this->gateSize("radioInOut$o");
int d=intrand(gateCount);
send(job,"radioInOut$o",d);
FSM_Goto(fsm,active);
break;
}
}
}
【问题讨论】:
标签: omnet++