Esempio n. 1
0
        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);
                    }
                }
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        private void CustomerArrived(BEvent arrive, int nowTime)
        {
            var leave = arrive.Master.Leave;

            leave.Time += nowTime;
            eventHeap.Insert(leave);
            arrive.Happen();
            idleCashier--;
        }