Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void Work()
- {
- int time1;
- int newtime = 0;
- Detail det1;
- time1 = Generator.generateArrive();
- int path = Generator.generatePath();
- if (path == 1) {
- det1 = new FirstDetail(path);
- this.detailsQueue.Enqueue(det1);
- }
- else if (path == 2)
- {
- det1 = new SecondDetail(path);
- this.detailsQueue.Enqueue(det1);
- }
- else if (path == 3)
- {
- det1 = new ThirdDetail(path);
- this.detailsQueue.Enqueue(det1);
- }
- this.TimeOnWork = this.TimeOnWork + time1;
- FirstBench bench1 = new FirstBench();
- SecondBench bench2 = new SecondBench();
- ThirdBench bench3 = new ThirdBench();
- Queue<Detail> firstReady = new Queue<Detail>();
- Queue<Detail> secondReady = new Queue<Detail>();
- while (this.TimeOnWork != 480 && this.TimeOnWork < 480)
- {
- newtime = 0;
- Console.WriteLine("Начинаем цикл");
- Thread thread1 = new Thread(() => DetailArriveSync(detailsQueue, newtime));
- thread1.Start();
- BenchWork(this.detailsQueue, this.readyDetails, ref newtime, ref bench1, ref bench2, ref bench3, ref firstReady, ref secondReady);
- /*Parallel.Invoke(
- () => DetailArriveSync(this.detailsQueue),
- () => BenchWork(this.detailsQueue, this.readyDetails, ref newtime)
- );*/
- Console.WriteLine("Цикл на новой итерации");
- this.TimeOnWork += newtime;
- }
- }
- 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)
- {
- //выкидывает деталь из очереди, работает, кидает деталь в список готовых, возвращает время
- Detail det;
- FirstDetail det1;
- SecondDetail det2;
- ThirdDetail det3;
- int time = 0;
- int path;
- Console.WriteLine("Начало работы станков");
- if (detailsQueue.Count != 0)
- {
- det = detailsQueue.Peek();
- detailsQueue.Dequeue();
- path = det.path;
- if (path == 1)
- {
- det1 = new FirstDetail(path);
- if (!bench1.isBusy && !det1.isReady)
- {
- bench1.isBusy = true;
- time = Generator.generateFirstBench();
- newtime += time;
- readyDetails.Add(det1);
- det1.isReady = true;
- bench1.isBusy = false;
- det1.time = time;
- Console.WriteLine("Добавлена деталь с 1 станка");
- }
- }
- else if (path == 2)
- {
- det2 = new SecondDetail(path);
- if (!bench1.isBusy && !det2.firstReady)
- {
- bench1.isBusy = true;
- int time1 = Generator.generateFirstBench();
- newtime += time1;
- bench1.isBusy = false;
- det2.firstReady = true;
- det2.time += time1;
- firstReady.Enqueue(det2);
- }
- if (!bench2.isBusy && !det2.secondReady && (det2 == firstReady.Peek()))
- {
- firstReady.Dequeue();
- bench2.isBusy = true;
- int time2 = Generator.generateSecondBench();
- newtime += time2;
- readyDetails.Add(det2);
- det2.secondReady = true;
- bench2.isBusy = false;
- det2.time += time2;
- }
- Console.WriteLine("Добавлена деталь с 2 станка");
- }
- else if (path == 3)
- {
- int firstOrder = Generator.generateOrder();
- det3 = new ThirdDetail(path);
- if (firstOrder == 1)
- {
- if (!bench1.isBusy && !det3.firstReady)
- {
- bench1.isBusy = true;
- int time1 = Generator.generateFirstBench();
- newtime += time1;
- bench1.isBusy = false;
- det3.firstReady = true;
- det3.time += time1;
- firstReady.Enqueue(det3);
- }
- if (!bench2.isBusy && !det3.secondReady && (det3 == firstReady.Peek()))
- {
- firstReady.Dequeue();
- bench2.isBusy = true;
- int time2 = Generator.generateSecondBench();
- newtime += time2;
- bench2.isBusy = false;
- det3.secondReady = true;
- det3.time += time2;
- secondReady.Enqueue(det3);
- Console.WriteLine("Деталь пошла со 2 на 3");
- }
- }
- else
- {
- if (!bench2.isBusy && !det3.secondReady)
- {
- bench2.isBusy = true;
- int time2 = Generator.generateFirstBench();
- newtime += time2;
- bench2.isBusy = false;
- det3.secondReady = true;
- det3.time += time2;
- secondReady.Enqueue(det3);
- }
- if (!bench1.isBusy && !det3.firstReady && (det3 == secondReady.Peek()))
- {
- secondReady.Dequeue();
- bench1.isBusy = true;
- int time1 = Generator.generateSecondBench();
- newtime += time1;
- bench1.isBusy = false;
- det3.firstReady = true;
- det3.time += time1;
- firstReady.Enqueue(det3);
- Console.WriteLine("Деталь пошла с 1 на 3");
- }
- }
- if(!bench3.isBusy && !det3.thirdReady && (firstOrder == 1 && det3 == secondReady.Peek()))
- {
- secondReady.Dequeue();
- bench3.isBusy = true;
- int time3 = Generator.generateThirdBench();
- newtime += time3;
- bench3.isBusy = false;
- det3.thirdReady = true;
- det3.time += time3;
- readyDetails.Add(det3);
- Console.WriteLine("Добавлена деталь с 3 станка с 2 очереди");
- }
- else if(!bench3.isBusy && !det3.thirdReady && (firstOrder == 2 && det3 == firstReady.Peek()))
- {
- firstReady.Dequeue();
- bench3.isBusy = true;
- int time3 = Generator.generateThirdBench();
- newtime += time3;
- bench3.isBusy = false;
- det3.thirdReady = true;
- det3.time += time3;
- readyDetails.Add(det3);
- Console.WriteLine("Добавлена деталь с 3 станка с 1 очереди");
- }
- }
- }
- Console.WriteLine("Станки закончили");
- return newtime;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement