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; }
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(); }