コード例 #1
0
 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);
     }
 }
コード例 #2
0
        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;
            }
        }