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 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(); } }
private void wyjdzZPrzychodni(Pacjent obslugiwanyPacjent) { while (!obslugiwanyPacjent.Idz(1110, 800)) { Thread.Sleep(okno.sleepVal); okno.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) { } }