Beispiel #1
0
        public void Start()
        {
            int czasPoczatkowy = Environment.TickCount;

            Thread[] tt = new Thread[IleWatkow];
            for (int i = 0; i < IleWatkow; ++i)
            {
                tt[i]          = new Thread(UruchamianieObliczenPi);
                tt[i].Priority = ThreadPriority.Lowest;
                tt[i].Start();
            }

            //czekanie na zakończenie wątków
            foreach (Thread t in tt)
            {
                t.Join();
                OutputProvider.ShowThreadEndMessage(t.ManagedThreadId);
            }
            _pi /= IleWatkow;
            OutputProvider.ShowAllThreadsEndMessage(_pi);
            int czasKoncowy = Environment.TickCount;
            int roznica     = czasKoncowy - czasPoczatkowy;

            OutputProvider.ShowTime(roznica);
        }
        public void Start()
        {
            int czasPoczatkowy = Environment.TickCount;

            //tworzenie wątków
            ThreadPool.SetMaxThreads(30, 100);
            WaitCallback metodaWatku = UruchamianieObliczenPi;

            for (int i = 0; i < IleWatkow; ++i)
            {
                ewht[i] = new EventWaitHandle(false, EventResetMode.AutoReset);
                ThreadPool.QueueUserWorkItem(metodaWatku, i);
            }
            for (int i = 0; i < IleWatkow; ++i)
            {
                ewht[i].WaitOne();
            }
            double pi = 4.0 * całkowitaIlośćTrafień / (ilośćPróbWWątku * IleWatkow);

            OutputProvider.ShowAllThreadsEndMessage(pi);
            int czasKoncowy = Environment.TickCount;
            int roznica     = czasKoncowy - czasPoczatkowy;

            OutputProvider.ShowTime(roznica);
        }
        public void Start()
        {
            int czasPoczatkowy = Environment.TickCount;
            //tworzenie wątków
            WaitCallback metodaWatku = UruchamianieObliczenPi;

            ThreadPool.SetMaxThreads(30, 100);
            for (int i = 0; i < IleWatkow; ++i)
            {
                ThreadPool.QueueUserWorkItem(metodaWatku, i);
            }
            //czekanie na zakończenie wątków
            int ileDostepnychWatkowWPuli  = 0; //nieużywane wątki puli
            int ileWszystkichWatkowWPuli  = 0; //wszystkie wątki puli
            int ileDzialajacychWatkowPuli = 0; //używane wątki puli
            int tmp = 0;

            do
            {
                ThreadPool.GetAvailableThreads(out ileDostepnychWatkowWPuli, out tmp);
                ThreadPool.GetMaxThreads(out ileWszystkichWatkowWPuli, out tmp);
                ileDzialajacychWatkowPuli = ileWszystkichWatkowWPuli - ileDostepnychWatkowWPuli;
                Console.WriteLine("Ilość aktywnych wątków puli: {0}", ileDzialajacychWatkowPuli);
                Thread.Sleep(100);
            }while (ileDzialajacychWatkowPuli > 0);
            _pi /= IleWatkow;

            OutputProvider.ShowAllThreadsEndMessage(_pi);
            int czasKoncowy = Environment.TickCount;
            int roznica     = czasKoncowy - czasPoczatkowy;

            OutputProvider.ShowTime(roznica);
        }
        public void Start()
        {
            Thread t = new Thread(UruchamianieObliczenPi);

            t.Start();
            //Thread.Sleep(2000);
            OutputProvider.ShowQuestion();
        }
Beispiel #5
0
        public void Start()
        {
            Thread t = new Thread(UruchamianieObliczenPi);

            t.Start();
            Thread.Sleep(500);
            t.Suspend();
            OutputProvider.AskForContinuation();
            t.Resume();
        }
        private void UruchamianieObliczenPi()
        {
            int czasPoczatkowy = Environment.TickCount;

            OutputProvider.ShowStartLabel();
            double pi = PiCalculator.ObliczPi(IlośćPrób);

            OutputProvider.ShowResultWithThreadNumber(pi);
            int czasKoncowy = Environment.TickCount;
            int roznica     = czasKoncowy - czasPoczatkowy;

            OutputProvider.ShowTime(roznica);
        }
Beispiel #7
0
        public void Start()
        {
            int czasPoczatkowy = Environment.TickCount;

            //tworzenie wątków
            ThreadPool.SetMaxThreads(30, 100);
            WaitCallback metodaWatku = UruchamianieObliczenPi;

            for (int i = 0; i < IleWatkow; ++i)
            {
                ewht[i] = new EventWaitHandle(false, EventResetMode.AutoReset);
                ThreadPool.QueueUserWorkItem(metodaWatku, i);
            }

            Thread watekAlaTimer = new Thread(() =>
            {
                Console.WriteLine("Uruchamiam wątek sprawozdawczy");
                try
                {
                    while (true)
                    {
                        Thread.Sleep(1000);
                        Console.WriteLine("Ilość prób: " + Interlocked.Read(ref całkowitaIlośćPrób).ToString() + "/" + (IleWatkow * ilośćPróbWWątku).ToString());
                    }
                }
                catch (ThreadAbortException exc)
                {
                    Console.WriteLine("Przerywanie działania wątku sprawozdawczego.\nKońcowa ilość prób: " + Interlocked.Read(ref całkowitaIlośćPrób).ToString() + "/" + (IleWatkow * ilośćPróbWWątku).ToString());
                }
            });

            watekAlaTimer.Priority     = ThreadPriority.Highest;
            watekAlaTimer.IsBackground = true;
            watekAlaTimer.Start();

            for (int i = 0; i < IleWatkow; ++i)
            {
                ewht[i].WaitOne();
            }
            double pi = 4.0 * całkowitaIlośćTrafień / (ilośćPróbWWątku * IleWatkow);

            OutputProvider.ShowAllThreadsEndMessage(pi);
            int czasKoncowy = Environment.TickCount;
            int roznica     = czasKoncowy - czasPoczatkowy;

            OutputProvider.ShowTime(roznica);

            watekAlaTimer.Abort();
        }
Beispiel #8
0
 private void UruchamianieObliczenPi()
 {
     try
     {
         OutputProvider.ShowStartLabelOneLine();
         double pi = PiCalculator.ObliczPiWithInnerRandomGenerator(IlośćPrób / IleWatkow);
         OutputProvider.ShowResultWithThreadNumber(pi);
     }
     catch (ThreadAbortException ex)
     {
         OutputProvider.ShowThreadAbortException(ex.Message);
     }
     catch (Exception ex)
     {
         OutputProvider.ShowErrorMessage(ex.Message);
     }
 }
 private static void UruchamianieObliczenPi(object parametr)
 {
     try
     {
         int?indeks = parametr as int?;
         OutputProvider.ShowStartLabel(indeks);
         var ilośćTrafień = PiCalculator.ObliczIlośćTrafień(ilośćPróbWWątku, ref całkowitaIlośćPrób);
         Interlocked.Add(ref całkowitaIlośćTrafień, ilośćTrafień);
         ewht[indeks.Value].Set();
     }
     catch (ThreadAbortException ex)
     {
         OutputProvider.ShowThreadAbortException(ex.Message);
     }
     catch (Exception ex)
     {
         OutputProvider.ShowErrorMessage(ex.Message);
     }
 }
Beispiel #10
0
 private void UruchamianieObliczenPi(object parametr)
 {
     try
     {
         int?indeks = parametr as int?;
         OutputProvider.ShowStartLabel(indeks);
         double pi = PiCalculator.ObliczPiWithInnerRandomGeneratorAndLockSection(IlośćPrób / IleWatkow, _pi);
         _pi += pi;
         OutputProvider.ShowResultWithThreadNumber(pi);
     }
     catch (ThreadAbortException ex)
     {
         OutputProvider.ShowThreadAbortException(ex.Message);
     }
     catch (Exception ex)
     {
         OutputProvider.ShowErrorMessage(ex.Message);
     }
 }
 private void UruchamianieObliczenPi()
 {
     try
     {
         int czasPoczatkowy = Environment.TickCount;
         OutputProvider.ShowStartLabel();
         double pi = PiCalculator.ObliczPi(IlośćPrób);
         OutputProvider.ShowResultWithThreadNumber(pi);
         int czasKoncowy = Environment.TickCount;
         int roznica     = czasKoncowy - czasPoczatkowy;
         OutputProvider.ShowTime(roznica);
     }
     catch (ThreadAbortException ex)
     {
         OutputProvider.ShowThreadAbortException(ex.Message);
     }
     catch (Exception ex)
     {
         OutputProvider.ShowErrorMessage(ex.Message);
     }
 }
Beispiel #12
0
        public void Start()
        {
            int czasPoczatkowy = Environment.TickCount;

            //tworzenie wątków
            ThreadPool.SetMaxThreads(30, 100);
            WaitCallback metodaWatku = UruchamianieObliczenPi;

            for (int i = 0; i < IleWatkow; ++i)
            {
                ewht[i] = new EventWaitHandle(false, EventResetMode.AutoReset);
                ThreadPool.QueueUserWorkItem(metodaWatku, i);
            }

            System.Timers.Timer timer = new System.Timers.Timer(1000);
            timer.Elapsed += new System.Timers.ElapsedEventHandler(
                (object sender, System.Timers.ElapsedEventArgs e) =>
            {
                Console.WriteLine("Ilość prób: " +
                                  Interlocked.Read(ref całkowitaIlośćPrób).ToString() +
                                  "/" + (IleWatkow * ilośćPróbWWątku).ToString());
            });
            timer.Start();

            for (int i = 0; i < IleWatkow; ++i)
            {
                ewht[i].WaitOne();
            }
            double pi = 4.0 * całkowitaIlośćTrafień / (ilośćPróbWWątku * IleWatkow);

            OutputProvider.ShowAllThreadsEndMessage(pi);
            int czasKoncowy = Environment.TickCount;
            int roznica     = czasKoncowy - czasPoczatkowy;

            OutputProvider.ShowTime(roznica);

            timer.Stop();
            timer.Dispose();
        }
        public void Start()
        {
            int czasPoczatkowy = Environment.TickCount;

            //tworzenie wątków
            ThreadPool.SetMaxThreads(30, 100);
            WaitCallback metodaWatku = UruchamianieObliczenPi;

            for (int i = 0; i < IleWatkow; ++i)
            {
                ewht[i] = new EventWaitHandle(false, EventResetMode.AutoReset);
                ThreadPool.QueueUserWorkItem(metodaWatku, i);
            }

            Timer timer = new Timer((object state) =>
            {
                Console.WriteLine("Ilość prób: " + Interlocked.Read(ref całkowitaIlośćPrób).ToString() + "/" + (IleWatkow * ilośćPróbWWątku).ToString());
            },                             //metoda typu TimerCallback (void (object))
                                    null,  //obiekt przesyłany do metody jako argument (state)
                                    0,     //opóźnienie (czas do pierwszego uruchomienia metody)
                                    1000); //co ile milisekund uruchamiana będzie metoda

            for (int i = 0; i < IleWatkow; ++i)
            {
                ewht[i].WaitOne();
            }
            double pi = 4.0 * całkowitaIlośćTrafień / (ilośćPróbWWątku * IleWatkow);

            OutputProvider.ShowAllThreadsEndMessage(pi);
            int czasKoncowy = Environment.TickCount;
            int roznica     = czasKoncowy - czasPoczatkowy;

            OutputProvider.ShowTime(roznica);

            timer.Change(-1, System.Threading.Timeout.Infinite);
            timer.Dispose();
        }
Beispiel #14
0
        public static double ObliczPiWithInnerRandomGeneratorAndLockSection(long ilośćPrób, double pi)
        {
            Random r = new Random(Random.Next() & DateTime.Now.Millisecond);

            long ilośćTrafień = 0;

            for (long i = 0; i < ilośćPrób; ++i)
            {
                if (i == ilośćPrób / 2)
                {
                    lock ((object)pi) //pudełkowanie
                    {
                        OutputProvider.ShowSyncMessage();
                    }
                }
                var x = r.NextDouble();
                var y = r.NextDouble();
                if (x * x + y * y < 1)
                {
                    ++ilośćTrafień;
                }
            }
            return(4.0 * ilośćTrafień / ilośćPrób);
        }
Beispiel #15
0
        public void Start()
        {
            int czasPoczatkowy = Environment.TickCount;
            //tworzenie wątków
            WaitCallback metodaWatku = UruchamianieObliczenPi;

            ThreadPool.SetMaxThreads(30, 100);
            for (int i = 0; i < IleWatkow; ++i)
            {
                ewht[i] = new EventWaitHandle(false, EventResetMode.AutoReset);
                ThreadPool.QueueUserWorkItem(metodaWatku, i);
            }
            //czekanie na zakończenie wątków
            for (int i = 0; i < IleWatkow; ++i)
            {
                ewht[i].WaitOne();
            }
            _pi /= IleWatkow;
            OutputProvider.ShowAllThreadsEndMessage(_pi);
            int czasKoncowy = Environment.TickCount;
            int roznica     = czasKoncowy - czasPoczatkowy;

            OutputProvider.ShowTime(roznica);
        }