經過連續幾天的思索,電梯調度的基本算法初步實現,並做了一個簡易的圖像窗口供查看。現先說說這幾天的工作
雖然最終沒有實現人數和時間的控制,但實現了電梯的簡易操作與多線程的運用。
(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)執行結果截圖: