Пример #1
0
        const int lWatkow = 1; //liczba jednoczesnych wątków z symulacją jak jest większa liczba, to nie są wpisywane wszystkie wyniki. Program działa stabilnie

        protected override void InicjacjaNowegoBadaniaSymulacji(double aOf, int nrBadania)
        {
            lZdarzen[nrBadania] = new agendaType3(this);
            sWiazka[nrBadania]  = new SimGroup(aWiazka);
            foreach (trClass kOfer in aWiazka.ListaKlasRuchu)
            {
                kOfer.ObliczParametry(aOf, aWiazka.sumaPropAT, aWiazka.V);
                kOfer.InicjacjaKolejnegoBadaniaSymulacji(sWiazka[nrBadania], lZdarzen[nrBadania], this, nrBadania);
                kOfer.sigmyStanow = new SigmaStruktury(aWiazka.V + 1);
                kOfer.sigmyStanow.wyczysc();
            }
            lZdarzen[nrBadania].czasOczekiwania = aWiazka.CzStartu;
        }
Пример #2
0
        protected override void SymulujWiazke(int nrBadania, int nrSerii)
        {
            agendaType3 agendaSym = lZdarzen[nrBadania] as agendaType3;
            SimGroup    wiazka    = sWiazka[nrBadania];

            agendaSym.zajeta.WaitOne();
            NowaSeria(nrBadania, false);
            while (symulowac(wiazka))
            {
                processSym pierwszy = agendaSym.PobierzPierwszy();
                if (pierwszy.czas < 0)
                {
                    if (pierwszy.czas > -0.00001)
                    {
                        pierwszy.czas = 0;
                    }
                    else
                    {
                        throw new Exception(string.Format("Ujemny czas {0}", pierwszy.czas));
                    }
                }
                agendaSym.CofnijCzasy(pierwszy.czas);
                if (agendaSym.zapStatystyk)
                {
                    wiazka.Podlicz(pierwszy.czas);
                }
                else
                {
                    agendaSym.czasOczekiwania -= pierwszy.czas;
                }
                pierwszy.Obsluz();
            }

            KoniecSerii(nrBadania, nrSerii);
            lZdarzen[nrBadania].zajeta.ReleaseMutex();
            ZapiszWynikiSerii(nrBadania, nrSerii);
            aWiazka.DodPost();
        }