zoukankan      html  css  js  c++  java
  • 电梯调度分析(二)

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

       

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

    (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)执行结果截图:

                     

            

           

  • 相关阅读:
    聪明的质检员 (二分)
    分巧克力(二分)
    产生冠军 HDU
    Legal or Not HDU
    确定比赛名次 HDU
    最短路径问题 HDU
    dijkstra算法为什么不能有负边?
    最短路 HDU
    dijkstra算法 模板
    Floyd算法模板--详解
  • 原文地址:https://www.cnblogs.com/sulindong/p/3603838.html
Copyright © 2011-2022 走看看