public WaitSectionThread(Point origin, int delay, string moving_direc, Panel panel, bool endPanel, int panelNo, ParkingCar obj, int select_position, Semaphore semaphore, Semaphore semaphoreNxt, Buffer buff_this, Buffer buffNxt, Buffer buffPSlot, Buffer buff_turn) { this.origin = origin; this.delay = delay; this.moving_direc = moving_direc; this.panel = panel; this.endPanel = endPanel; this.panelNo = panelNo; this.select_position = select_position; this.semaphore = semaphore; // this.semaphore = semaphoreNxt; this.buff_this = buff_this; this.buffNxt = buffNxt; this.buffPSlot = buffPSlot; this.buff_turn = buff_turn; this.car = origin; this.panel.Paint += new PaintEventHandler(this.panel_Paint); //setting the direction based on the panels and cars moving direction switch (moving_direc) { //case "north": // this.xDelta = 0; // this.yDelta = -5; // break; case "south": this.xDelta = 0; this.yDelta = 5; break; case "east": this.xDelta = 5; this.yDelta = 0; break; case "west": this.xDelta = -5; this.yDelta = 0; break; default: break; } }
public Form1() { //running the GUI InitializeComponent(); //Creation of buffer objects for normal panels buff1 = new Buffer(); buff2 = new Buffer(); buff3 = new Buffer(); buff4 = new Buffer(); buff5 = new Buffer(); buff6 = new Buffer(); buff7 = new Buffer(); buff8 = new Buffer(); buff9 = new Buffer(); buff10 = new Buffer(); buff11 = new Buffer(); buff12 = new Buffer(); buff13 = new Buffer(); buff14 = new Buffer(); buff15 = new Buffer(); buff16 = new Buffer(); buff17 = new Buffer(); //creation of semaphore objects semaphore = new Semaphore(); semaphore2 = new Semaphore(); semaphore3 = new Semaphore(); semaphore4 = new Semaphore(); semaphore5 = new Semaphore(); semaphore6 = new Semaphore(); semaphore7 = new Semaphore(); semaphore8 = new Semaphore(); semaphore9 = new Semaphore(); semaphore10 = new Semaphore(); semaphore11 = new Semaphore(); semaphore12 = new Semaphore(); semaphore13 = new Semaphore(); semaphore14 = new Semaphore(); semaphore15 = new Semaphore(); semaphore16 = new Semaphore(); semaphore17 = new Semaphore(); semaphore18 = new Semaphore(); semaphore19 = new Semaphore(); semaphore20 = new Semaphore(); semaphore21 = new Semaphore(); // semaphorePark1 = new Semaphore(); //Creation of buffer objects for parking slot panels buffPark_slot1 = new Buffer(); buffPark_slot2 = new Buffer(); buffPark_slot3 = new Buffer(); buffPark_slot4 = new Buffer(); buffPark_slot5 = new Buffer(); buffPark_slot6 = new Buffer(); buffPark_slot7 = new Buffer(); buffPark_slot8 = new Buffer(); buffPark_slot9 = new Buffer(); buffPark_slot10 = new Buffer(); buffPark_slot11 = new Buffer(); //Creation of buffer objects for junction panels buffTurnPanel12 = new Buffer(); buffTurnPanel13 = new Buffer(); buffTurnPanel14 = new Buffer(); buffTurnPanel15 = new Buffer(); btnThreadA = new ButtonPanelThread(new Point(50, -12), 100, pA, btnParkCarA, rb1, rb2, rb3, rb4, rb5, rb6, 100, semaphore, buff1);//last one be speed btnThreadB = new ButtonPanelThread(new Point(50, -12), 90, pB, btnParkCarB, rb7, rb8, rb9, rb10, rb11, null, 200, semaphore14, buff12); // Park A and Park B Button Threads btnThread1 = new Thread(new ThreadStart(btnThreadA.Start)); btnThread2 = new Thread(new ThreadStart(btnThreadB.Start)); //Park A and Park B Button Thread start btnThread1.Start(); btnThread2.Start(); // overloading left Panels to hold car waitThread1 = new WaitSectionThread(new Point(50, -10), 50, "south", pnl1, false, 30, parkslot1, 1, semaphore, semaphore2, buff1, buff2, null, buffTurnPanel12); //try changing panelID waitThread2 = new WaitSectionThread(new Point(50, -10), 100, "south", pnl2, false, 1, parkslot2, 1, semaphore2, semaphore3, buff2, buff3, buffPark_slot1, null); waitThread3 = new WaitSectionThread(new Point(50, -10), 100, "south", pnl3, false, 2, parkslot3, 1, semaphore3, semaphore4, buff3, buff4, buffPark_slot2, null); waitThread4 = new WaitSectionThread(new Point(50, -10), 100, "south", pnl4, false, 3, parkslot1, 1, semaphore4, semaphore5, buff4, buff5, buffPark_slot3, null); waitThread5 = new WaitSectionThread(new Point(50, -10), 100, "south", pnl5, false, 13, parkslot1, 1, semaphore5, semaphore6, buff5, buff6, null, null); waitThread6 = new WaitSectionThread(new Point(50, -10), 100, "south", pEA, true, 17, parkslot1, 1, semaphore6, semaphore7, buff6, null, null, null); // initializing the thread to aid when turning car waitThread7 = new WaitSectionThread(new Point(-5, 25), 40, "east", pnl6, false, 10, parkslot1, 1, semaphore, semaphore8, buffTurnPanel12, buff7, null, null); waitThread8 = new WaitSectionThread(new Point(50, -10), 100, "south", pnl8, false, 11, parkslot1, 1, semaphore8, semaphore9, buff7, buff8, null, null); waitThread9 = new WaitSectionThread(new Point(50, -10), 100, "south", pnl9, false, 4, parkslot1, 3, semaphore9, semaphore10, buff8, buff9, buffPark_slot4, buffPark_slot7); waitThread10 = new WaitSectionThread(new Point(50, -10), 100, "south", pnl10, false, 5, parkslot1, 3, semaphore10, semaphore11, buff9, buff10, buffPark_slot5, buffPark_slot8); waitThread11 = new WaitSectionThread(new Point(50, -10), 100, "south", pnl11, false, 6, parkslot1, 3, semaphore11, semaphore12, buff10, buff11, buffPark_slot6, buffPark_slot9); waitThread12 = new WaitSectionThread(new Point(50, -10), 100, "south", pnl12, false, 32, parkslot1, 1, semaphore11, semaphore12, buff11, buffTurnPanel13, buffTurnPanel14, null); waitThread13 = new WaitSectionThread(new Point(300, 20), 40, "west", pnl7, false, 14, parkslot1, 1, semaphore12, semaphore6, buffTurnPanel13, buff5, null, buff5); // overloading right Panels to hold car waitThread14 = new WaitSectionThread(new Point(50, -10), 50, "south", pnl15, false, 31, null, 2, semaphore14, semaphore15, buff12, buff13, null, buffTurnPanel15); waitThread15 = new WaitSectionThread(new Point(50, -10), 100, "south", pnl16, false, 52, null, 2, semaphore15, semaphore16, buff13, buff14, buffPark_slot10, null); waitThread16 = new WaitSectionThread(new Point(50, -10), 100, "south", pnl17, false, 53, null, 2, semaphore16, semaphore17, buff14, buff15, buffPark_slot11, null); waitThread17 = new WaitSectionThread(new Point(50, -10), 100, "south", pnl18, false, 9, null, 2, semaphore17, semaphore18, buff15, buff16, null, null); waitThread18 = new WaitSectionThread(new Point(50, -10), 100, "south", pnl19, false, 13, null, 2, semaphore18, semaphore19, buff16, buff17, null, null); waitThread19 = new WaitSectionThread(new Point(50, -10), 100, "south", pEB, true, 18, null, 2, semaphore19, semaphore20, buff17, null, null, null); /*Panel 21 turning panle */ waitThread20 = new WaitSectionThread(new Point(250, 25), 40, "west", pnl13, false, 12, null, 2, semaphore20, semaphore21, buffTurnPanel15, buff8, null, null); waitThread21 = new WaitSectionThread(new Point(0, 20), 40, "east", pnl14, false, 15, null, 2, semaphore21, semaphore20, buffTurnPanel14, buff16, null, null); //Overloading the waiting threads thread1 = new Thread(new ThreadStart(waitThread1.Start)); thread2 = new Thread(new ThreadStart(waitThread2.Start)); thread3 = new Thread(new ThreadStart(waitThread3.Start)); thread4 = new Thread(new ThreadStart(waitThread4.Start)); thread5 = new Thread(new ThreadStart(waitThread5.Start)); thread6 = new Thread(new ThreadStart(waitThread6.Start)); thread7 = new Thread(new ThreadStart(waitThread7.Start)); thread8 = new Thread(new ThreadStart(waitThread8.Start)); thread9 = new Thread(new ThreadStart(waitThread9.Start)); thread10 = new Thread(new ThreadStart(waitThread10.Start)); thread11 = new Thread(new ThreadStart(waitThread11.Start)); thread12 = new Thread(new ThreadStart(waitThread12.Start)); thread13 = new Thread(new ThreadStart(waitThread13.Start)); thread14 = new Thread(new ThreadStart(waitThread14.Start)); thread15 = new Thread(new ThreadStart(waitThread15.Start)); thread16 = new Thread(new ThreadStart(waitThread16.Start)); thread17 = new Thread(new ThreadStart(waitThread17.Start)); thread18 = new Thread(new ThreadStart(waitThread18.Start)); thread19 = new Thread(new ThreadStart(waitThread19.Start)); thread20 = new Thread(new ThreadStart(waitThread20.Start)); thread21 = new Thread(new ThreadStart(waitThread21.Start)); //waiting panel threads Start thread1.Start(); thread2.Start(); thread3.Start(); thread4.Start(); thread5.Start(); thread6.Start(); thread7.Start(); thread8.Start(); thread9.Start(); thread10.Start(); thread11.Start(); thread12.Start(); thread13.Start(); thread14.Start(); thread15.Start(); thread16.Start(); thread17.Start(); thread18.Start(); thread19.Start(); thread20.Start(); thread21.Start(); //threads to park vehical in the relevant spots parkslot1 = new ParkingCar(new Point(-10, 20), 100, "east", btnPark1, 40, s1, semaphore3, semaphore2, buffPark_slot1, buff3); parkslot2 = new ParkingCar(new Point(-10, 20), 100, "east", btnPark2, 41, s2, semaphore4, semaphore3, buffPark_slot2, buff4); parkslot3 = new ParkingCar(new Point(-10, 20), 100, "east", btnPark3, 42, s3, semaphore5, semaphore4, buffPark_slot3, buff5); parkslot4 = new ParkingCar(new Point(100, 20), 100, "west", btnPark4, 43, s4, semaphore11, semaphore10, buffPark_slot4, buff9); parkslot5 = new ParkingCar(new Point(100, 20), 100, "west", btnPark5, 44, s5, semaphore12, semaphore11, buffPark_slot5, buff10); parkslot6 = new ParkingCar(new Point(100, 20), 100, "west", btnPark6, 45, s6, semaphore13, semaphore12, buffPark_slot6, buff11); //for parking slots 7,8,9,10,11 parkslot7 = new ParkingCar(new Point(110, 15), 100, "west", btnPark10, 49, s10, semaphore16, semaphore15, buffPark_slot10, buff14); parkslot8 = new ParkingCar(new Point(110, 20), 100, "west", btnPark11, 50, s11, semaphore17, semaphore16, buffPark_slot11, buff15); parkslot9 = new ParkingCar(new Point(-10, 20), 100, "east", btnPark7, 46, s7, semaphore10, semaphore10, buffPark_slot7, buff9); parkslot10 = new ParkingCar(new Point(-10, 20), 100, "east", btnPark8, 47, s8, semaphore11, semaphore10, buffPark_slot8, buff10); parkslot11 = new ParkingCar(new Point(-10, 20), 100, "east", btnPark9, 48, s9, semaphore11, semaphore10, buffPark_slot9, buff11); //starting the parking threads parkThread1 = new Thread(new ThreadStart(parkslot1.Start)); parkThread2 = new Thread(new ThreadStart(parkslot2.Start)); parkThread3 = new Thread(new ThreadStart(parkslot3.Start)); parkThread4 = new Thread(new ThreadStart(parkslot4.Start)); parkThread5 = new Thread(new ThreadStart(parkslot5.Start)); parkThread6 = new Thread(new ThreadStart(parkslot6.Start)); parkThread7 = new Thread(new ThreadStart(parkslot7.Start)); parkThread8 = new Thread(new ThreadStart(parkslot8.Start)); parkThread9 = new Thread(new ThreadStart(parkslot9.Start)); parkThread10 = new Thread(new ThreadStart(parkslot10.Start)); parkThread11 = new Thread(new ThreadStart(parkslot11.Start)); //parking car thread start parkThread1.Start(); parkThread2.Start(); parkThread3.Start(); parkThread4.Start(); parkThread5.Start(); parkThread6.Start(); parkThread7.Start(); parkThread8.Start(); parkThread9.Start(); parkThread10.Start(); parkThread11.Start(); }