我需要在处理消息时在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)。
谢谢
...
答案 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()