private void Begin() { int nowTime = 0; while (!eventHeap.IsEmpty() || idleCashier != cashierCount) { BEvent bEvent = eventHeap.DeleteMin(); nowTime = bEvent.Time; if (bEvent.IsArrived) { if (idleCashier > 0) { CustomerArrived(bEvent, nowTime); } else { waitQueue.Enqueue(bEvent); } } else { idleCashier++; bEvent.Happen(); if (waitQueue.Count != 0) { var arrive = waitQueue.Dequeue(); CustomerArrived(arrive, nowTime); } } } }
public Customer(int arrivedTime, int leftTime, string name) { this.name = name; string arrivedMsg = $"{name} was arrived"; string leftMsg = $"{name} was left"; Arrive = new BEvent(arrivedTime, arrivedMsg, true, this); Leave = new BEvent(leftTime, leftMsg, false, this); }
private void CustomerArrived(BEvent arrive, int nowTime) { var leave = arrive.Master.Leave; leave.Time += nowTime; eventHeap.Insert(leave); arrive.Happen(); idleCashier--; }