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();
            }
        }
Exemple #2
0
        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();
     }
 }
Exemple #4
0
        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)
            {

            }
        }