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

            }
        }