⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sev.h

📁 一个模拟沃尔玛柜台结账的排队论仿真
💻 H
字号:
#ifndef SEV_H
#define SEV_H
#include <iostream.h>
#include <stdlib.h>
#include <math.h>

#include "link.h"
#include "event.h"

class Sev
{
public:
	Sev(double m,int sid);
	~Sev();

	int		sevEvt();
	void	updateTim();
	void	sendMes();

	double	getTim();
	int		getSta();
	int		getSid();

	list<Mess>* sch;
	list<Event>* que;
	Event* evt;

	double mu;
private:
	double Tim;

	int sta;
	int sevId;
};

Sev::Sev(double m,int sid):Tim(0),mu(m),sch(NULL),que(NULL),evt(NULL),sta(0),sevId(sid){}
Sev::~Sev(){sch=NULL;que=NULL;evt=NULL;}

double Sev::getTim(){return Tim;}
int Sev::getSta(){return sta;}
int Sev::getSid(){return sevId;}

int Sev::sevEvt()
{
	assert(que);
	if(evt!=NULL)
		delete(evt);
	evt=NULL;
	if(que->getLen()==0)
	{
		sta=0;
		updateTim();
	}
	else
	{
		evt=que->getHead();
		assert(evt);
		sta=1;
		evt->setInqStp(Tim);

		updateTim();
		evt->setEndStp(Tim);
	}
	sendMes();	
	return sta;
}

void Sev::sendMes()
{
	assert(sch);
	sch->addPri(new Mess(sevId,Tim));
}

void Sev::updateTim()
{
	Mess* ms=NULL;
	if(sta==0)
	{
#ifdef _DEBUG_
		//cout<<"empty in queue ["<<sevId<<"]"<<endl;
#endif
		assert(sch);
		if(sch->getLen()!=0)
		{
			ms=sch->sechGenMes();
			if(ms!=NULL)
				Tim=ms->getTim();
		}	
	}
	if(sta==1)
	{
		double p, delt;
		while(1)
		{
			p=(double)rand()/((double)RAND_MAX+1.0);
			if(p!=0)
				break;
		}
			
		delt=-log(p)/mu;
		Tim=Tim+delt;
	}
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -