電梯調度分析(二)


     經過連續幾天的思索,電梯調度的基本算法初步實現,並做了一個簡易的圖像窗口供查看。現先說說這幾天的工作

   

  雖然最終沒有實現人數和時間的控制,但實現了電梯的簡易操作與多線程的運用。

(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)執行結果截圖:

                 

        

       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM