public SimClassPascal(trClassPascal badana, SimGroup sWiazka, agenda listaZd, aSimulation algSym) : base(badana, sWiazka, listaZd, algSym) { _S = badana.S; _gamma = badana.PodajIntZgl(0) / _S; if (badana.progiKlasy == null) { maxLzr = sWiazka.V / badana.t + _S; } else { maxLzr = sWiazka.V / badana.tMin + _S; } zrodla = new processCall[maxLzr]; for (int i = 0; i < maxLzr; i++) { zrodla[i] = null; } for (int zgl = 0; zgl < _S; zgl++) { zrodla[zgl] = new processPascal(listaZd, this.czNowegoZgl, this, zgl); listaZd.DodajProces(zrodla[zgl]); } }
public override void Obsluz() { switch (faza) { case processStage.oczekiwanie: //Zgłoszenie trafia do systemu processCall nowe = new processPascal(ListaZd, klasaZgl.czNowegoZgl, symKlasaPascal, nrZr); ListaZd.DodajProces(nowe); symKlasaPascal.zrodla[nrZr] = nowe; 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 nrNowoDodanegoZr = symKlasaPascal.znajdzWolneZr(); symKlasaPascal.zrodla[nrNowoDodanegoZr] = new processPascal(ListaZd, klasaZgl.czNowegoZgl, symKlasaPascal, nrNowoDodanegoZr); ListaZd.DodajProces(symKlasaPascal.zrodla[nrNowoDodanegoZr]); } 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; ListaZd.UsunProces(symKlasaPascal.zrodla[nrNowoDodanegoZr]); symKlasaPascal.zrodla[nrNowoDodanegoZr] = null; break; } }