static void Main(String [] args) { Plant carPlant = new Plant(); Plant2 carPlant2 = new Plant2(); Thread plant = new Thread(new ThreadStart(carPlant.PlantFunc)); Thread plant2 = new Thread(new ThreadStart(carPlant2.PlantFunc)); // Thread stocks = new Thread(new ThreadStart(stockmarket.stockFunc)); Thread stocks2 = new Thread(new ThreadStart(stockmarket2.stockFunc)); // stocks.Start(); stocks2.Start(); plant.Name = "brian"; plant2.Name = "edward"; plant.Start(); plant2.Start(); CarDealer dealer = new CarDealer(); Plant.priceCut += new priceCutEvent(dealer.carOnSale); Plant2.priceCut += new priceCutEvent(dealer.carOnSale); Thread[] dealers = new Thread[2]; for (int i = 0; i < 2; i++) { dealers[i] = new Thread(new ThreadStart(dealer.carDealerFunc)); dealers[i].Name = (i + 1).ToString(); dealers[i].Start(); } Console.ReadLine(); }
//start thread here public void PlantFunc() { plantName2 = Thread.CurrentThread.Name; for (Int32 i = 0; i < 5; i++) { Thread.Sleep(1500); //// mod //// double stockprice = CarProject.stockmarket2.getstockprice(); Int32 p = PricingModel(orderstaken, carsAvailable, stockprice); //// mod //// //Console.WriteLine("{0} new price is {1}", Thread.CurrentThread.Name, p); Plant2.carPriceChange(p); //Thread.Sleep(3000); order = CarProject.Cellbuffer.getOneCell(Thread.CurrentThread.Name); //Decoder(order); if (!"0".Equals(order)) { lock (locker) { carsAvailable--; orderstaken++; } Console.WriteLine("edward received the order {0}", order); orderprocessing = new OrderProcessing(Decoder(order)); } } }
public void carDealerFunc() { Plant carPlant = new Plant(); Plant2 carPlant2 = new Plant2(); String receiverName; Int32 parkingLot = 10; Int32 creditCard = rng.Next(5000, 7000); Int32 carPrice; Int32 carPrice2; //Plant2 carprice Int32 dealPrice; Int32 plantIndex; for (Int32 i = 0; i < 10; i++) { Thread.Sleep(rng.Next(500, 1000)); carPrice = carPlant.getPrice(); carPrice2 = carPlant2.getPrice(); if (carPrice > carPrice2) { dealPrice = carPrice2; plantIndex = 2; } else { dealPrice = carPrice; plantIndex = 1; } //check if the car in the sell list if (!carStatus.ContainsKey(dealPrice)) { carStatus.TryAdd(dealPrice, false); } //the dealer only buy the sale car or the car price is lower than 200 //the first dealer which have the empty places can buy the car, the others need to wait for next price cut. lock (order) { if (parkingLot != 0 && carStatus[dealPrice] == false) { if (plantIndex == 1) { receiverName = carPlant.getPlantName(); } else { receiverName = carPlant2.getPlantName(); } try { order.setSenderID(Thread.CurrentThread.Name); order.setCardNo(creditCard); order.setReceiverID(receiverName); order.setAmount(1); order.setUnitPrice(dealPrice); order.setDateTime(DateTime.Now); CarProject.Cellbuffer.setOneCell(this.Encoder(order)); } finally { parkingLot--; carStatus[dealPrice] = true; Console.WriteLine("dealer {0} buy the car, the empty lot is {1}, the price is {2}", Thread.CurrentThread.Name, parkingLot, dealPrice); } } } String confirmString = CarProject.confirmBuffer.getOneCell(Thread.CurrentThread.Name); if (!"0".Equals(confirmString)) { Console.WriteLine(confirmString); } } }