Advertisement
Guest User

Untitled

a guest
Oct 20th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.97 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.Threading;
  11. namespace SRV2
  12. {
  13.     public partial class Form1 : Form
  14.     {
  15.         List<int> myBuf;
  16.         List<int> myWorked;
  17.         Thread Generator;
  18.         Thread Checker;
  19.         Thread[] myPool;
  20.         Boolean[] IRun;
  21.         Mutex myMutex;
  22.         int Semaphore;
  23.         int PoolCount;
  24.         public Form1()
  25.         {
  26.             InitializeComponent();
  27.             timer1.Interval = 100;
  28.             timer1.Enabled = true;
  29.             Semaphore = 0;
  30.             PoolCount = 2;
  31.             myBuf = new List<int>();
  32.             myWorked = new List<int>();
  33.             myPool = new Thread[PoolCount];
  34.             IRun = new Boolean[PoolCount];
  35.             for (int i = 0; i < PoolCount; i++)
  36.             {
  37.                 myPool[i] = new Thread(delegate ()
  38.                 {
  39.                     doSomething(i);
  40.                 });
  41.                 IRun[i] = false;
  42.             }
  43.             Generator = new Thread(delegate ()
  44.             {
  45.                 while (true)
  46.                 {
  47.                     int N = new Random().Next(1, 10);
  48.                     for (int i = 0; i < N; i++)
  49.                     {
  50.                         GenerateNumber();
  51.                         Semaphore++;
  52.                     }
  53.                     Thread.Sleep(1500);
  54.                 }
  55.             });
  56.  
  57.             Checker = new Thread(delegate ()
  58.             {
  59.                 while (true)
  60.                 {
  61.                     Thread.Sleep(2000);
  62.                     if (Semaphore > 0)
  63.                     {
  64.                         this.doSomethingParallel();
  65.                     }
  66.                 }
  67.             });
  68.             Generator.Start();
  69.             Checker.Start();
  70.  
  71.         }
  72.  
  73.         public void GenerateNumber()
  74.         {
  75.             myBuf.Add(new Random().Next(100));
  76.         }
  77.  
  78.         public void doSomethingParallel()
  79.         {
  80.             Random myRand = new Random();
  81.             while(Semaphore>0)
  82.             {
  83.                 while(true)
  84.                 {
  85.                     int numb = myRand.Next(myPool.Count()-1);
  86.                     Boolean tmp = myPool[numb].ThreadState != ThreadState.Running;
  87.                    // MessageBox.Show(tmp.ToString());
  88.                     if (!IRun[numb])
  89.                     {
  90.                         myPool[numb] = new Thread(delegate () { doSomething(numb); });
  91.                         myPool[numb].Start();
  92.                         Semaphore--;
  93.                         break;
  94.                     }
  95.                 }
  96.                
  97.                
  98.             }
  99.         }
  100.         public void doSomething(int numb)
  101.         {
  102.             IRun[numb] = true;
  103.             int i = myBuf[0];
  104.             Thread.Sleep(1000);
  105.             myBuf.RemoveAt(0);
  106.             myWorked.Add(i);
  107.             IRun[numb] = false;
  108.            
  109.           //  MessageBox.Show(myBuf[0].ToString());
  110.            
  111.  
  112.         }
  113.         private void Form1_Load(object sender, EventArgs e)
  114.         {
  115.            
  116.         }
  117.  
  118.         private void timer1_Tick(object sender, EventArgs e)
  119.         {
  120.             try
  121.             {
  122.                 String BufText = "";
  123.                 String WorkedText = "";
  124.                 foreach (int i in myBuf)
  125.                 {
  126.                     BufText += i.ToString() + ", ";
  127.                 }
  128.                 foreach (int i in myWorked)
  129.                 {
  130.                     WorkedText += i.ToString() + ", ";
  131.                 }
  132.                 textBox1.Text = BufText;
  133.                 textBox2.Text = WorkedText;
  134.                 textBox1.Invalidate();
  135.                 textBox2.Invalidate();
  136.                 label1.Text = Semaphore.ToString();
  137.             }
  138.             catch
  139.             {
  140.                 ;
  141.             }
  142.         }
  143.     }
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement