Advertisement
Guest User

Untitled

a guest
Dec 7th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.54 KB | None | 0 0
  1. public void Work()
  2.         {
  3.             int time1;
  4.             int newtime = 0;
  5.             Detail det1;
  6.             time1 = Generator.generateArrive();
  7.             int path = Generator.generatePath();
  8.             if (path == 1) {
  9.                 det1 = new FirstDetail(path);
  10.                 this.detailsQueue.Enqueue(det1);
  11.             }
  12.             else if (path == 2)
  13.             {
  14.                 det1 = new SecondDetail(path);
  15.                 this.detailsQueue.Enqueue(det1);
  16.             }
  17.             else if (path == 3)
  18.             {
  19.                 det1 = new ThirdDetail(path);
  20.                 this.detailsQueue.Enqueue(det1);
  21.             }
  22.             this.TimeOnWork = this.TimeOnWork + time1;
  23.  
  24.             FirstBench bench1 = new FirstBench();
  25.             SecondBench bench2 = new SecondBench();
  26.             ThirdBench bench3 = new ThirdBench();
  27.             Queue<Detail> firstReady = new Queue<Detail>();
  28.             Queue<Detail> secondReady = new Queue<Detail>();
  29.            
  30.             while (this.TimeOnWork != 480 && this.TimeOnWork < 480)
  31.             {
  32.                 newtime = 0;
  33.                 Console.WriteLine("Начинаем цикл");
  34.                 Thread thread1 = new Thread(() => DetailArriveSync(detailsQueue, newtime));
  35.                 thread1.Start();
  36.                 BenchWork(this.detailsQueue, this.readyDetails, ref newtime, ref bench1, ref bench2, ref bench3, ref firstReady, ref secondReady);
  37.                 /*Parallel.Invoke(
  38.                   () => DetailArriveSync(this.detailsQueue),
  39.                   () => BenchWork(this.detailsQueue, this.readyDetails, ref newtime)
  40.                 );*/
  41.                 Console.WriteLine("Цикл на новой итерации");
  42.                 this.TimeOnWork += newtime;
  43.             }
  44.         }
  45.  
  46. public static int BenchWork(Queue<Detail> detailsQueue, List<Detail> readyDetails, ref int newtime, ref FirstBench bench1, ref SecondBench bench2, ref ThirdBench bench3, ref Queue<Detail> firstReady, ref Queue<Detail> secondReady)
  47.         {
  48.             //выкидывает деталь из очереди, работает, кидает деталь в список готовых, возвращает время
  49.             Detail det;
  50.             FirstDetail det1;
  51.             SecondDetail det2;
  52.             ThirdDetail det3;
  53.             int time = 0;
  54.             int path;
  55.             Console.WriteLine("Начало работы станков");
  56.             if (detailsQueue.Count != 0)
  57.             {
  58.                 det = detailsQueue.Peek();
  59.                 detailsQueue.Dequeue();
  60.                 path = det.path;
  61.                 if (path == 1)
  62.                 {
  63.                     det1 = new FirstDetail(path);
  64.                     if (!bench1.isBusy && !det1.isReady)
  65.                     {
  66.                        
  67.                         bench1.isBusy = true;
  68.                         time = Generator.generateFirstBench();
  69.                         newtime += time;
  70.                         readyDetails.Add(det1);
  71.                         det1.isReady = true;
  72.                         bench1.isBusy = false;
  73.                         det1.time = time;
  74.                         Console.WriteLine("Добавлена деталь с 1 станка");
  75.                     }
  76.                 }
  77.                 else if (path == 2)
  78.                 {
  79.                     det2 = new SecondDetail(path);
  80.                     if (!bench1.isBusy && !det2.firstReady)
  81.                     {
  82.                         bench1.isBusy = true;
  83.                         int time1 = Generator.generateFirstBench();
  84.                         newtime += time1;
  85.                         bench1.isBusy = false;
  86.                         det2.firstReady = true;
  87.                         det2.time += time1;
  88.                         firstReady.Enqueue(det2);
  89.                     }
  90.  
  91.                     if (!bench2.isBusy && !det2.secondReady && (det2 == firstReady.Peek()))
  92.                     {
  93.                         firstReady.Dequeue();
  94.                         bench2.isBusy = true;
  95.                         int time2 = Generator.generateSecondBench();
  96.                         newtime += time2;
  97.                         readyDetails.Add(det2);
  98.                         det2.secondReady = true;
  99.                         bench2.isBusy = false;
  100.                         det2.time += time2;
  101.                     }
  102.                     Console.WriteLine("Добавлена деталь с 2 станка");
  103.                 }
  104.                 else if (path == 3)
  105.                 {
  106.                     int firstOrder = Generator.generateOrder();
  107.                     det3 = new ThirdDetail(path);
  108.                     if (firstOrder == 1)
  109.                     {
  110.                         if (!bench1.isBusy && !det3.firstReady)
  111.                         {
  112.                             bench1.isBusy = true;
  113.                             int time1 = Generator.generateFirstBench();
  114.                             newtime += time1;
  115.                             bench1.isBusy = false;
  116.                             det3.firstReady = true;
  117.                             det3.time += time1;
  118.                             firstReady.Enqueue(det3);
  119.                         }
  120.                         if (!bench2.isBusy && !det3.secondReady && (det3 == firstReady.Peek()))
  121.                         {
  122.                             firstReady.Dequeue();
  123.                             bench2.isBusy = true;
  124.                             int time2 = Generator.generateSecondBench();
  125.                             newtime += time2;
  126.                             bench2.isBusy = false;
  127.                             det3.secondReady = true;
  128.                             det3.time += time2;
  129.                             secondReady.Enqueue(det3);
  130.                             Console.WriteLine("Деталь пошла со 2 на 3");
  131.                         }
  132.                     }
  133.                     else
  134.                     {
  135.                         if (!bench2.isBusy && !det3.secondReady)
  136.                         {
  137.                             bench2.isBusy = true;
  138.                             int time2 = Generator.generateFirstBench();
  139.                             newtime += time2;
  140.                             bench2.isBusy = false;
  141.                             det3.secondReady = true;
  142.                             det3.time += time2;
  143.                             secondReady.Enqueue(det3);
  144.                         }
  145.                         if (!bench1.isBusy && !det3.firstReady && (det3 == secondReady.Peek()))
  146.                         {
  147.                             secondReady.Dequeue();
  148.                             bench1.isBusy = true;
  149.                             int time1 = Generator.generateSecondBench();
  150.                             newtime += time1;
  151.                             bench1.isBusy = false;
  152.                             det3.firstReady = true;
  153.                             det3.time += time1;
  154.                             firstReady.Enqueue(det3);
  155.                             Console.WriteLine("Деталь пошла с 1 на 3");
  156.                         }
  157.                     }
  158.                     if(!bench3.isBusy && !det3.thirdReady && (firstOrder == 1 && det3 == secondReady.Peek()))
  159.                     {
  160.                         secondReady.Dequeue();
  161.                         bench3.isBusy = true;
  162.                         int time3 = Generator.generateThirdBench();
  163.                         newtime += time3;
  164.                         bench3.isBusy = false;
  165.                         det3.thirdReady = true;
  166.                         det3.time += time3;
  167.                         readyDetails.Add(det3);
  168.                         Console.WriteLine("Добавлена деталь с 3 станка с 2 очереди");
  169.                     }
  170.                     else if(!bench3.isBusy && !det3.thirdReady && (firstOrder == 2 && det3 == firstReady.Peek()))
  171.                     {
  172.                         firstReady.Dequeue();
  173.                         bench3.isBusy = true;
  174.                         int time3 = Generator.generateThirdBench();
  175.                         newtime += time3;
  176.                         bench3.isBusy = false;
  177.                         det3.thirdReady = true;
  178.                         det3.time += time3;
  179.                         readyDetails.Add(det3);
  180.                         Console.WriteLine("Добавлена деталь с 3 станка с 1 очереди");
  181.                     }
  182.                 }
  183.             }
  184.             Console.WriteLine("Станки закончили");
  185.             return newtime;
  186.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement