如何在Sink中获取serviceTime?

时间:2015-11-18 03:38:16

标签: omnet++

我需要在处理消息时在Sink中使用serviceTime进行模拟。我该如何恢复?我尝试了不同的方法,但没有奏效。例如,要以与服务器组件检索值相同的方式进行恢复,但是我收到错误: Sink.h

Job *jobServiced;

Sink.cc

void Sink::handleMessage(cMessage *msg)
{
jobServiced = check_and_cast<Job *>(msg);
simtime_t serviceTime = par("serviceTime");

在尝试此选项之前,我没有获得正确的值来获取服务时间和服务率的平均值:

sink.cc

void Sink::handleMessage(cMessage *msg)
{
    num_jobs++;
    serviceTime = (serviceTime + job->getTotalServiceTime())/num_jobs;
    serviceRate= (1/serviceTime);
}
void Sink::finish()
{       recordScalar("ServiceTime", serviceTime);
       recordScalar("ServiceRate", serviceRate);
}

我得到了:

Service Time      Service Rate   
0.50                 1.99
0.43                 2.29
0.25                 3.99
0.11                 8.49
0.10                 9.38
0.05                 17.815
0.13                 7.403
0.003                30.485

在运行中,有一点我得到一个错误,无法将1.0336e + 007转换为simtime_t:超出范围指数-12允许的范围(-922337203685477)。

谢谢

...

1 个答案:

答案 0 :(得分:0)

看一下Sink.cc:

void Sink::handleMessage(cMessage *msg)
{
    Job *job = check_and_cast<Job *>(msg);

    // gather statistics
    emit(lifeTimeSignal, simTime()- job->getCreationTime());
    emit(totalQueueingTimeSignal, job->getTotalQueueingTime());
    emit(queuesVisitedSignal, job->getQueueCount());
    emit(totalServiceTimeSignal, job->getTotalServiceTime());
    emit(totalDelayTimeSignal, job->getTotalDelayTime());
    emit(delaysVisitedSignal, job->getDelayCount());
    emit(generationSignal, job->getGeneration());

    if (!keepJobs)
        delete msg;
}

这就是如何访问作业中所有累积的统计数据。即使用:

job->getTotalServiceTime()