电梯调度分析(二)

     经过连续几天的思索,电梯调度的基本算法初步实现,并做了一个简易的图像窗口供查看。现先说说这几天的工作

   

  虽然最终没有实现人数和时间的控制,但实现了电梯的简易操作与多线程的运用。

(2)模块化设计

     ①电梯类的实现(elevator)

       电梯类包括:电梯所在楼层、电梯内按钮面板的状态、电梯外按钮面板的状态(是否被按下)、电梯门的闭合、电梯的运行方向、电梯是否正在运行。

class elevator
    {
        public int floor;  //楼层
        public bool[] panel;  //电梯内的面板状态
        public int direction;  //电梯运行的方向 (up,down)
        public int gatestatus;  //电梯门的关合 (open,close)
        public bool isrun;  //是否正在运行

        const int UP = 0;
        const int DOWN = 1;

        const int CLOSE = 0;
        const int OPEN = 1;
    }

    通过电梯类,实现多部电梯的初始化构造。

    ②电梯控制类(elevatorController)

      电梯控制类里面主要包含以下方法:

       1.电梯操作方法:operate(int iore, int type, int select) 

        int iore:判断按钮操作是在电梯内部还是外部

        int type:判断该调用那部电梯

        int  select:判断目标所在的楼层

      2.电梯运行方法:run(elevator ele)

        该方法判断目标楼层是否存在,如果存在,利用多线程机制,实现空闲楼梯前往目标楼层 

      3.电梯执行是否开门:operaGate(elevator ele)

       判断当前所在楼层按钮的状态,如果被按下,执行开门操作。

      4.电梯是否正在执行任务: isGoOn(elevator ele)

       判断当前电梯是否正在运行

      5.任务的获取:gettask(elevator ele)

       获取目标层及运动放向。

      关键多线程部分代码:

    if (!ele_1.isrun)
      {
           ele_1.isrun = true;
            //实例化Thread电梯一线程
            Thread th1 = new Thread(new ThreadStart(run_ele1));   
            th1.IsBackground = true;
            th1.Start();
       }
    if (!ele_2.isrun)
      {
        ele_2.isrun = true;
        //实例化Thread电梯二线程
        Thread th2 = new Thread(new ThreadStart(run_ele2));     
        th2.IsBackground = true;
        th2.Start();
      }

  (3)其实工作还有很多,由于没有加人数及时间限制,电梯的实际工作模式依据与多线程的调度方法:

         当电梯均未工作时,多部电梯将同时相应。

         当其中的有任务时,将选择未工作的电梯。

         采用多线程,谁先到达,谁就开门,执行载客任务。

 (4)执行结果截图:

                 

        

       

原文地址:https://www.cnblogs.com/sulindong/p/3603838.html