fifo.cpp
来自「simulation fifo protocol」· C++ 代码 · 共 94 行
CPP
94 行
//
// This file is part of an OMNeT++/OMNEST simulation example.
//
// Copyright (C) 1992-2005 Andras Varga
//
// This file is distributed WITHOUT ANY WARRANTY. See the file
// `license' for details on this and other legal matters.
//
#include <omnetpp.h>
#include "fifo.h"
FFAbstractFifo::FFAbstractFifo()
{
msgServiced = endServiceMsg = NULL;
}
FFAbstractFifo::~FFAbstractFifo()
{
delete msgServiced;
cancelAndDelete(endServiceMsg);
}
void FFAbstractFifo::initialize()
{
endServiceMsg = new cMessage("end-service");
queue.setName("queue");
}
void FFAbstractFifo::handleMessage(cMessage *msg)
{
if (msg==endServiceMsg)
{
endService( msgServiced );
if (queue.empty())
{
msgServiced = NULL;
}
else
{
msgServiced = (cMessage *) queue.getTail();
simtime_t serviceTime = startService( msgServiced );
scheduleAt( simTime()+serviceTime, endServiceMsg );
}
}
else if (!msgServiced)
{
arrival( msg );
msgServiced = msg;
simtime_t serviceTime = startService( msgServiced );
scheduleAt( simTime()+serviceTime, endServiceMsg );
}
else
{
arrival( msg );
queue.insert( msg );
}
}
//------------------------------------------------
Define_Module( FFPacketFifo );
simtime_t FFPacketFifo::startService(cMessage *msg)
{
ev << "Starting service of " << msg->name() << endl;
return par("serviceTime");
}
void FFPacketFifo::endService(cMessage *msg)
{
ev << "Completed service of " << msg->name() << endl;
send( msg, "out" );
}
//------------------------------------------------
Define_Module( FFBitFifo );
simtime_t FFBitFifo::startService(cMessage *msg)
{
ev << "Starting service of " << msg->name() << endl;
return msg->length() / (double)par("bitsPerSec");
}
void FFBitFifo::endService(cMessage *msg)
{
ev << "Completed service of " << msg->name() << endl;
send( msg, "out" );
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?