C++ 使用Omnet+生成perodic消息+;来自同一源节点
我有一个给定的网络,其节点有以下两种方法:C++ 使用Omnet+生成perodic消息+;来自同一源节点,c++,omnet++,C++,Omnet++,我有一个给定的网络,其节点有以下两种方法: void Txc13::initialize() { // Module 0 sends the first message if (getIndex() == 0) { // Boot the process scheduling the initial message as a self-message. TicTocMsg13 *msg = generateMessage(); si
void Txc13::initialize()
{
// Module 0 sends the first message
if (getIndex() == 0) {
// Boot the process scheduling the initial message as a self-message.
TicTocMsg13 *msg = generateMessage();
simtime_t delay = par("delayTime");
scheduleAt(simTime()+delay, msg);
}
}
void Txc13::handleMessage(cMessage *msg)
{
// we do some casting to access the fields inside the message
TicTocMsg13 *ttmsg = check_and_cast<TicTocMsg13 *>(msg);
if (ttmsg->getDestination() == getIndex()) {
// Message arrived.
bubble("ARRIVED!");
delete ttmsg;
}
else {
// We need to forward the message.
forwardMessage(ttmsg);
}
}
void Txc13::initialize()
{
//模块0发送第一条消息
如果(getIndex()==0){
//启动进程,将初始消息作为自我消息进行调度。
TicTocMsg13*msg=generateMessage();
simtime_t delay=par(“delayTime”);
scheduleAt(simTime()+延迟,msg);
}
}
void Txc13::handleMessage(cMessage*msg)
{
//我们执行一些强制转换来访问消息中的字段
TicTocMsg13*ttmsg=检查和铸造(msg);
如果(ttmsg->getDestination()==getIndex()){
//消息传来了。
泡泡(“到了!”);
删除ttmsg;
}
否则{
//我们需要转发消息。
转发消息(ttmsg);
}
}
这个很好用。当离开节点0(getIndex()==0
)的消息到达其预期目的地时,模拟结束
现在,我愿意在一些延迟后触发几条离开node0
的消息
延迟呈指数分布网络。tic[*]。延迟时间=指数(10s)
如何从同一节点触发多条消息
谢谢 好的,我想我明白了。这是两种方法的代码。在initialize
方法中,我创建了一个事件
消息,我最初在t=0时触发该消息
void Txc13::initialize()
{
// Create the event object we'll use for timing -- just any ordinary message.
event = new cMessage("event");
// Module 0 sends the first message
if (getIndex() == 0) {
scheduleAt(0.0, event);
}
}
void Txc13::handleMessage(cMessage *msg)
{
if (msg == event and getIndex() == 0){
TicTocMsg13 *msg = generateMessage();
simtime_t delay = par("delayTime");
scheduleAt(simTime()+delay, event);
forwardMessage(msg);
}
else {
// we do some casting to access the fields inside the message
TicTocMsg13 *ttmsg = check_and_cast<TicTocMsg13 *>(msg);
if (ttmsg->getDestination() == getIndex()) {
// Message arrived.
//EV << "Message " << ttmsg << " arrived after " << ttmsg->getHopCount() << " hops.\n";
bubble("ARRIVED!");
delete ttmsg;
// Generate another one.
//EV << "Generating another message: ";
//TicTocMsg13 *newmsg = generateMessage();
//EV << newmsg << endl;
//forwardMessage(newmsg);
}
else {
// We need to forward the message.
forwardMessage(ttmsg);
}
}
}
在handleMessage
方法中,我检查传入消息是否为事件。如果是这样,我会等待simtime\u t delay=par(“delayTime”)
,它呈指数分布,发送另一条自我消息,并在消息本身上转发
因为我希望所有消息都从node0开始,所以我还使用getIndex()==0
检查这一点
void Txc13::handleMessage(cMessage *msg)
{
if (msg == event and getIndex() == 0){
TicTocMsg13 *msg = generateMessage();
simtime_t delay = par("delayTime");
scheduleAt(simTime()+delay, event);
forwardMessage(msg);
}
else {
// we do some casting to access the fields inside the message
TicTocMsg13 *ttmsg = check_and_cast<TicTocMsg13 *>(msg);
if (ttmsg->getDestination() == getIndex()) {
// Message arrived.
//EV << "Message " << ttmsg << " arrived after " << ttmsg->getHopCount() << " hops.\n";
bubble("ARRIVED!");
delete ttmsg;
// Generate another one.
//EV << "Generating another message: ";
//TicTocMsg13 *newmsg = generateMessage();
//EV << newmsg << endl;
//forwardMessage(newmsg);
}
else {
// We need to forward the message.
forwardMessage(ttmsg);
}
}
}
void Txc13::handleMessage(cMessage*msg)
{
if(msg==event和getIndex()==0){
TicTocMsg13*msg=generateMessage();
simtime_t delay=par(“delayTime”);
scheduleAt(simTime()+延迟,事件);
转发消息(msg);
}
否则{
//我们执行一些强制转换来访问消息中的字段
TicTocMsg13*ttmsg=检查和铸造(msg);
如果(ttmsg->getDestination()==getIndex()){
//消息传来了。
//电动汽车