需要您的帮助。
我有三个模块A,B和C。
模块A向模块B发送20条消息。我想在收到来自模块A的所有20条消息后向模块C发送一个数据包。我该如何处理handleMessage上的这种情况?
目前,它像一个循环一样运行。每次到达时都会发送一个味精。我需要的是从上一个模块收集所有消息,从中收集数据,准备一条消息,然后向下一个模块发送一个味精。
================================================ ==
您的第一个解决方案运行良好。我只是在努力解决第二个问题。所以请帮我请检查以下代码,让我知道我错了。
class ModuleB: public cSimpleModule
{
protected:
virtual void initialize() override;
virtual void handleMessage(cMessage *msg) override;
private:
bool sentMessage = false;
simtime_t lastMessageReceivedAt;
simtime_t timer;
};
void ModuleB::initialize()
{
}
void ModuleB::handleMessage(cMessage *msg)
{
if(simTime() - lastMessageReceivedAt >= timer && sentMessage == false)
{
EV << counter << " messages to receive before sending.\n";
// Data collection
}
else
{
lastMessageReceivedAt = simTime();
EV << " Send message to Module C.\n";
cMessage *newMsg = new cMessage("Message")
send(newMsg, "out");
sentMessage = true;
}
}
答案 0 :(得分:2)
我认为您正在寻找这样的东西:
class ModuleB : public cSimpleModule {
private:
int counter;
protected:
virtual void initialize() override;
virtual void handleMessage(cMessage *msg) override;
};
void ModuleB::initialize() {
counter = 20;
}
void ModuleB::handleMessage(cMessage *msg) {
counter--;
if (counter > 0) {
EV << counter << " messages to receive before sending.\n";
// Data collection
}
else {
EV << " Send message to Module C.\n";
cMessage *newMsg = new cMessage("Message")
send(newMsg, "out");
}
}