电梯调度分析(二)
经过连续几天的思索,电梯调度的基本算法初步实现,并做了一个简易的图像窗口供查看。现先说说这几天的工作
虽然最终没有实现人数和时间的控制,但实现了电梯的简易操作与多线程的运用。
(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)执行结果截图: