我必须用处理能力有限的RSU模拟场景。它只能在一个时间单位(例如1秒)内处理有限数量的消息。
我试图在RSU应用程序中设置一个计数器。每次RSU接收到一条消息后,计数器就会增加,处理完之后,计数器会减少。这是我所做的:
void RSUApp::onBSM(BasicSafetyMessage* bsm)
{
if(msgCount >= capacity)
{
//drop msg
this->getParentModule()->bubble("capacity limit");
return;
}
msgCount++;
//process message here
msgCount--;
}
这似乎没用,我使用了limit = 1进行了测试,并且有2辆车同时发送消息。尽管RSU应该处理一个然后丢弃另一个,但RSU都会处理。
有人可以帮我吗?
答案 0 :(得分:0)
在onBSM
方法的开头,计数器递增,您的逻辑被执行,最后计数器递减。所有这些步骤都同时发生,这意味着在仿真的一个步骤中。
这就是为什么您看不到效果的原因。
您可能希望在一定的时间间隔(例如500毫秒)内处理一定数量的“消息”。它可能看起来像这样(未经测试):
if (simTime() <= intervalEnd && msgCount >= capacity)
{
this->getParentModule()->bubble("capacity limit");
return;
} else if (simTime() > intervalEnd) {
intervalEnd = simTime() + YOURINTERVAL;
msgCount = 0;
}
......
变量YOURINTERVAL
是您想将其作为capacity
的时间间隔的时间。