public void Pracuj() { while (true) { //synch lekarzPelny.WaitOne(); //synch lekarzKolejkaSem.WaitOne(); Pacjent obslugiwanyPacjent = new Pacjent(); //wylaczyc aborta na pacjencie obslugiwanyPacjent = kolejkaPacjentow.First(); kolejkaPacjentow.Remove(obslugiwanyPacjent); obslugiwanyPacjent.niecierpliwosc.Abort(); //synch this.UstawKolejke(); lekarzKolejkaSem.Release(); while (!obslugiwanyPacjent.Idz( punktObslugi.X, punktObslugi.Y )) { Thread.Sleep(okno.sleepVal); okno.Invalidate(); } obslugiwanyPacjent.lekarzeDoOdwiedzenia.Remove(this); Thread.Sleep(obslugiwanyPacjent.czasWizyty); if (obslugiwanyPacjent.lekarzeDoOdwiedzenia.Count == 0) { //lekarzPusty.Release(); obslugiwanyPacjent.idzT = new Thread(new ThreadStart(() => wyjdzZPrzychodni(obslugiwanyPacjent))); obslugiwanyPacjent.idzT.Start(); } else { obslugiwanyPacjent.idzT = new Thread(new ThreadStart(() => okno.idzDoKolejki(obslugiwanyPacjent))); obslugiwanyPacjent.idzT.Start(); } lekarzPusty.Release(); } }
private void wyjdzZPrzychodni(Pacjent obslugiwanyPacjent) { while (!obslugiwanyPacjent.Idz(1110, 800)) { Thread.Sleep(okno.sleepVal); okno.Invalidate(); } }
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); } }
private void testChodzenia(Pacjent temp) { while (!temp.Idz(521, 725)) { Thread.Sleep(sleepVal); this.Invalidate(); } while (!temp.Idz(520, 600)) { Thread.Sleep(sleepVal); this.Invalidate(); } // p pierwszej kolejki while (!temp.Idz(240, 180)) { Thread.Sleep(sleepVal); this.Invalidate(); } //pierwszy lekarz while (!temp.Idz(240, 90)) { Thread.Sleep(sleepVal); this.Invalidate(); } // p drugiej kolejki while (!temp.Idz(560, 180)) { Thread.Sleep(sleepVal); this.Invalidate(); } while (!temp.Idz(560, 90)) { Thread.Sleep(sleepVal); this.Invalidate(); } //pkty treciej kolejki while (!temp.Idz(860, 180)) { Thread.Sleep(sleepVal); this.Invalidate(); } while (!temp.Idz(860, 90)) { Thread.Sleep(sleepVal); this.Invalidate(); } // wyjscie while (!temp.Idz(1230, 400)) { Thread.Sleep(sleepVal); this.Invalidate(); } }
public void idzDoKolejki(Pacjent temp) { Point dest = new Point(); Lekarz l = temp.lekarzeDoOdwiedzenia.First(); l.lekarzPusty.WaitOne(); temp.aktualnyLekarz = l; dest.X = l.punktKolejki.X; dest.Y = l.punktKolejki.Y + 20*l.kolejkaPacjentow.Count; while (!temp.Idz(dest.X, dest.Y)) { Thread.Sleep(sleepVal); this.Invalidate(); } // l.lekarzKolejkaSem.WaitOne(); if (!temp.przywilej) { l.kolejkaPacjentow.AddLast(temp); } else { l.kolejkaPacjentow.AddFirst(temp); } l.UstawKolejke(); // tutaj nieciepliwosc trzebaby odpalic if (!temp.przywilej) temp.kolor = new SolidBrush(Color.FromArgb(135, 58, 7)); else temp.kolor = new SolidBrush(Color.FromArgb(240, 15, 15)); temp.niecierpliwosc = new Thread(new ThreadStart(temp.NiecierpliwoscStart)); l.lekarzKolejkaSem.Release(); l.lekarzPelny.Release(); try { if( temp.lekarzeDoOdwiedzenia.Count>1 ) temp.niecierpliwosc.Start(); }catch(ThreadStartException) { } }