📄 stcs.h
字号:
#ifndef STCS_H
#define STCS_H
#include <iostream.h>
#include <math.h>
#include "sev.h"
#include "link.h"
#include "gen.h"
double mean(double n, double av,double x){ return (av*(n-1)+x)/n;}
double var(double n, double s, double m, double x)
{
if(n<2)
return 1;
return s*(n-2)/(n-1)+n*(x-m)*(x-m)/(n-1)/(n-1);
}
class Stcs
{
public:
Stcs(list<Event>* q,Sev* s);
void calStcs(int type,double tim);
void calAD(int type,double tim);
friend ostream& operator<<(ostream& out,Stcs& st);
list<Event>* que;
Sev* sev;
public:
double num; //jobs in system, n=nq+ns
double nq; //jobs in queue
double ns; //jobs in servers
double rsp; //response time r=w+s
double w; //waiting time
double s; //service time per job
double n;
double mnq;
double varNq;
double varNs;
double nLda;
double nMu;
double avrLda;
double avrMu;
};
Stcs::Stcs(list<Event>* q,Sev* s):num(0),nq(0),ns(0),rsp(0),w(0),s(0),n(0),varNq(0),varNs(1)
{
nLda=0; nMu=0;
avrLda=0; avrMu=0;
mnq=0;
que=q;
sev=s;
}
void Stcs::calStcs(int type,double tim)
{
n++;
assert(que);
assert(sev);
double lq=que->getLen();
double ls=sev->getSta();
if(n>STA_POINT)
{
nq=mean(n,nq,lq);
ns=mean(n,ns,ls);
num=nq+ns;
mnq=mean(n,mnq,nq);
varNq=var(n-STA_POINT,varNq,mnq,nq);
///////////////response time/////////////////////////////////////////////
if(type>=0 && sev->getSta()==1)
{
double lw=sev->evt->getInqStp()-sev->evt->getStrStp();
double ls=sev->evt->getEndStp()-sev->evt->getInqStp();
w=mean(n,w,lw);
s=mean(n,s,ls);
rsp=w+s;
}
////////////////////////////////////////////////////////////////////////
}
calAD(type,tim);
}
void Stcs::calAD(int type,double tim)
{
if(type==GEN)
{
nLda++;
avrLda=nLda/tim;
}
else
{
if(sev->getSta()==1)
{
nMu++;
avrMu=nMu/tim;
}
}
}
ostream& operator<<(ostream& out,Stcs& st)
{ out<<"Total jobs: "<<st.n<<" | "
<<"Mean jobs in sys: "<<st.num<<" | "
<<"Mean response time: "<<st.rsp<<" | ";
return out;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -