📄 fifo.cpp
字号:
//
// 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -