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); } } } }
private void CustomerArrived(BEvent arrive, int nowTime) { var leave = arrive.Master.Leave; leave.Time += nowTime; eventHeap.Insert(leave); arrive.Happen(); idleCashier--; }