public SimClassErlang(trClass badana, SimGroup sWiazka, agenda listaZd, aSimulation algSym) : base(badana, sWiazka, listaZd, algSym) { processSym nowy = new processErlang(listaZd, this.czNowegoZgl, this); listaZd.DodajProces(nowy); }
public override void Obsluz() { switch (faza) { case processStage.oczekiwanie: processSym nowe = new processErlang(ListaZd, klasaZgl.czNowegoZgl, klasaZgl); ListaZd.DodajProces(nowe); //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 { 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ń } } } break; //Kończenie obsługi zgłoszenia case processStage.zgloszenie: klasaZgl.sWiazka.UsunZgl(this); // Zwalnianie zasobów 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; } }