Beispiel #1
0
        private void AtElevator()
        {
            Console.WriteLine($"T{riderThreadNumber}: R{Number} pushes E{elevator.Number}B{floorTo.Number}");
            elevator.SelectFloor(floorTo);

            elevator.RidersCanExitEvents[floorTo].WaitOne();

            Console.WriteLine($"T{riderThreadNumber}: R{Number} exits E{elevator.Number} on F{floorTo.Number}");
            elevator.Exit();

            State = RiderState.Exit;
        }
Beispiel #2
0
        private void AtFloor()
        {
            Console.WriteLine($"T{riderThreadNumber}: R{Number} pushes {(direction == Direction.Up ? "U" : "D")}{floorFrom.Number}");
            floorFrom.SelectButton(direction);

            floorFrom.Events[direction].RidersCanEnterEvent.WaitOne();

            foreach (Elevator elevator in floorFrom.GetElevatorsToEnter(direction))
            {
                if (elevator.TryEnter())
                {
                    this.elevator = elevator;

                    Console.WriteLine($"T{riderThreadNumber}: R{Number} enters E{elevator.Number} on F{floorFrom.Number}");

                    State = RiderState.AtElevator;

                    return;
                }
            }

            floorFrom.Events[direction].ButtonReleasedEvent.WaitOne();
        }