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(); }
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); }
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(); }
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); } }
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); } }
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(); }
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); }
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); }