public Pacjent(Lekarz l1, Form1 _form1) { Random rand = new Random(); koordynaty = new Point(0, 725); lekarzeDoOdwiedzenia.AddLast(l1); this.czasWizyty = rand.Next(7000,10000); okno = _form1; if (rand.Next(1, 11) < 3) { kolor = new SolidBrush(Color.FromArgb(240, 15, 15)); this.przywilej = true; } else { kolor = new SolidBrush(Color.FromArgb(135, 58, 7)); this.przywilej = false; } this.czasNiecierpliwosci = rand.Next(7000, 14000); }
/* Lekarz lekarz1; Lekarz lekarz2; Lekarz lekarz3; Lekarz lekarz4;*/ public Form1(int a) { InitializeComponent(); LICZBA_LEKARZY = a; int k = 120; for (int i = 0; i < LICZBA_LEKARZY; i++) { Lekarz lekarz = new Lekarz(this, new Point(k, 270), new Point(k, 90)); lekarz.praca = new Thread(new ThreadStart(lekarz.Pracuj)); lekarze.Add(lekarz); k = k + 240; } for (int i = 0; i < LICZBA_LEKARZY; i++) { Lekarz lekarz = lekarze.ElementAt(i); Thread generator = new Thread(new ThreadStart(() => generatorPacjentowLekarz(lekarz))); generator.Name = "lekarz" + (i + 1); generator.Start(); System.Console.WriteLine(generator.Name); } foreach (Lekarz lekarz in lekarze) { lekarz.praca.Start(); } /* //Lekarz z lewej lekarz1 = new Lekarz(this, new Point(240, 180), new Point(240, 90)); //this.lekarze.AddLast(lekarz1); lekarz1.praca = new Thread(new ThreadStart( lekarz1.Pracuj )); //Lekarz w srodku lekarz2 = new Lekarz(this, new Point(560, 180), new Point(560, 90)); //this.lekarze.AddLast(lekarz2); lekarz2.praca = new Thread(new ThreadStart(lekarz2.Pracuj)); //Lekarz z prawej lekarz3 = new Lekarz(this, new Point(860, 180), new Point(860, 90)); //this.lekarze.AddLast(lekarz3); lekarz3.praca = new Thread(new ThreadStart(lekarz3.Pracuj)); //xD lekarz4 = new Lekarz(this, new Point(1160, 180), new Point(1160, 90)); // this.lekarze.AddLast(lekarz4); lekarz4.praca = new Thread(new ThreadStart(lekarz4.Pracuj)); Thread generator1 = new Thread(new ThreadStart(() => generatorPacjentowLekarz(lekarz1))); generator1.Name = "lekarz1"; Thread generator2 = new Thread(new ThreadStart(() => generatorPacjentowLekarz(lekarz2))); generator2.Name = "lekarz2"; Thread generator3 = new Thread(new ThreadStart(() => generatorPacjentowLekarz(lekarz3))); generator3.Name = "lekarz3"; Thread generator4 = new Thread(new ThreadStart(() => generatorPacjentowLekarz(lekarz4))); generator4.Name = "lekarz4"; generator1.Start(); generator2.Start(); generator3.Start(); generator4.Start(); lekarz1.praca.Start(); lekarz2.praca.Start(); lekarz3.praca.Start(); lekarz4.praca.Start();*/ }
private void generatorPacjentowLekarz(Lekarz _lekarz2) { while (true) { Random rand = new Random(); int i = 0; //iterator testow int bO = 0; while (i < 5) { //TODO zmienic na losowa ilosc przypisywanych lekarzy Pacjent temp = new Pacjent(_lekarz2, this); //temp.lekarzeDoOdwiedzenia.AddLast( lekarze.Last() ); //Badania okresowe bO = rand.Next(1,5); foreach (Lekarz lekarz in lekarze) { for (int j = 0; j < bO;j++) { int randIndex = rand.Next(lekarze.Count); Lekarz kandydat = lekarze.ElementAt(randIndex); if (Thread.CurrentThread.Name.Equals(lekarz.praca.Name)) { j--; } if (!temp.lekarzeDoOdwiedzenia.Contains(kandydat)) { temp.lekarzeDoOdwiedzenia.AddLast(kandydat); } } } /* if (Thread.CurrentThread.Name.Equals("lekarz1")) { if (bO == 1) temp.lekarzeDoOdwiedzenia.AddLast(this.lekarze.ElementAt(1)); if (bO == 2) { temp.lekarzeDoOdwiedzenia.AddLast(this.lekarze.ElementAt(1)); temp.lekarzeDoOdwiedzenia.AddLast(this.lekarze.ElementAt(2)); } } else if(Thread.CurrentThread.Name.Equals("lekarz2")) { if (bO == 1) temp.lekarzeDoOdwiedzenia.AddLast(this.lekarze.ElementAt(0)); if (bO == 2) { temp.lekarzeDoOdwiedzenia.AddLast(this.lekarze.ElementAt(0)); temp.lekarzeDoOdwiedzenia.AddLast(this.lekarze.ElementAt(2)); } } else if (Thread.CurrentThread.Name.Equals("lekarz3")) { if (bO == 1) temp.lekarzeDoOdwiedzenia.AddLast(this.lekarze.ElementAt(1)); if (bO == 2) { temp.lekarzeDoOdwiedzenia.AddLast(this.lekarze.ElementAt(0)); } } */ this.dostepGrafikaSemaphore.WaitOne(); wszyscyPacjenci.AddLast(temp); this.dostepGrafikaSemaphore.Release(); temp.idzT = new Thread(new ThreadStart(() => idzDoKolejki(temp))); temp.idzT.Name = "Pacjent"; // sprawdzamy czy kolejka lekarza nie jest przepelniona temp.idzT.Start(); Thread.Sleep(3000); i++; } Thread.Sleep(60000); } }