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);
        }
示例#2
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
            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);
        }
示例#4
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();
        }
示例#5
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();
        }
示例#7
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);
        }