public SimClassEngset(trClassEngset badana, SimGroup sWiazka, agenda listaZd, aSimulation algSym) : base(badana, sWiazka, listaZd, algSym) { _S = badana.S; _gamma = badana.PodajIntZgl(0) / _S; for (int zgl = 0; zgl < _S; zgl++) { processSym nowy = new processEngset(listaZd, this.czNowegoZgl, this); listaZd.DodajProces(nowy); } }
public override void Obsluz() { switch (faza) { case processStage.oczekiwanie: //Zgłoszenie trafia do systemu if (klasaZgl.sWiazka.DodajZgl(this, ListaZd.zapStatystyk)) //próba zajęcia zasobów { faza = processStage.zgloszenie; czas = klasaZgl.czZakZgl; //Losowanie czasu zakończenia obsługi zgłoszenia ListaZd.DodajProces(this); //Ponowne umieszczanie procesu na liście } else { processSym nowe = new processEngset(ListaZd, klasaZgl.czNowegoZgl, klasaZgl); ListaZd.DodajProces(nowe); if (ListaZd.zapStatystyk) { klasaZgl.lStraconychZgl++; //Uaktualnianie statystyk klasy klasaZgl.warWyjsciaStr--; if (klasaZgl.warWyjsciaStr == 0) { klasaZgl.sWiazka.WarWyjscia--; //Warunkiem wyjścia jest odpowiednia liczba str zgłoszeń dla każdej z klas } } } break; //Kończenie obsługi zgłoszenia case processStage.zgloszenie: klasaZgl.sWiazka.UsunZgl(this); //Zwalnianie zasobów ListaZd.DodajProces(new processEngset(ListaZd, klasaZgl.czNowegoZgl, klasaZgl)); if (ListaZd.zapStatystyk) { klasaZgl.lObsluzonychZgl++; //Uaktualnianie statystyk klasu klasaZgl.warWyjsciaObsl--; if (klasaZgl.warWyjsciaObsl == 0) { klasaZgl.sWiazka.WarWyjscia2--; //Awaryjnym warunkiem wyjścia jest przesymulowanie okr liczby zgł } } faza = processStage.zakonczenie; break; } }