電梯調度(三)


續電梯調度(二)

                                                                                                                                                                                                  李帥---張碩

      對開始思路進行修改,使用四個線程(即多線程)來代替四部電梯實例,首先解釋一下多線程,多線程指程序中包含多個執行流,即在一個程序中可以同時運行多個不同的線程來執行不同的任務,也就是說允許單個程序創建多個並行執行的線程以完成各自的任務。通過對線程的運行,啟動和掛起來實現對電梯的調度。下面是定義的一些變量:
int[] flag ---請求上下樓的標志,初始為0,上樓為1,下樓為-1;

int[] ele_flag---電梯運行標志,初始為0,上樓為1,下樓為-1;

int[] num---電梯所在樓層;

int[] floortop = new int[4]---要到達的最高樓層;

 int[] floorbase = new int[4]---要到達的最低樓層;

int obj---中間變量發出請求的標志;

int[] obj_num---發出請求的樓層個數;

int[ ,] floor_num = new int[4,21]---電梯所要到達的樓層;

Thread ele1, ele2, ele3, ele4---四部電梯運行的線程實例;

下面是調度的主要算法:

  1 public void start()
  2         {
  3             
  4             int min = 22, d;
  5             int select = -1;
  6             if (floor_num[floor, floory] < floorbase[floor] && floor_num[floor, floory]>0)
  7             {
  8                 floorbase[floor] = floor_num[floor,floory];
  9             }
 10             if (floortop[floor] < floor_num[floor,floory])
 11             {
 12                 floortop[floor] = floor_num[floor,floory];
 13             }
 14             if (floor_num[0, obj] == -1 && floor_num[1, obj] == -1 && floor_num[2, obj] == -1 && floor_num[3, obj] == -1)          //發出請求的樓層未在等待中
 15             {
 16                  for (int i = 0; i < 4; i++)
 17                  {
 18                 
 19                     if (ele_flag[i] == 0)   //電梯停靠
 20                     {
 21 
 22                         d = Math.Abs(obj - num[i]);               //電梯與發出請求的樓層的距離
 23                         //找出最短距離的電梯,將距離最近的電梯號賦給select
 24                         if (min > d)
 25                         {
 26                             min = d;
 27                             select = i;
 28                             if (obj < num[i])
 29                             {
 30                                 ele_flag[i] = -1;
 31                             }
 32                             if (obj > num[i])
 33                             {
 34 
 35                                 ele_flag[i] = 1;
 36                             }
 37                             if (obj == num[i])
 38                             {
 39 
 40                                 ele_flag[i] = 0;
 41                             }
 42                         }
 43 
 44                     }
 45                     if (ele_flag[i] == 1 && flag[obj] == 1)   //電梯向上運行與請求同向
 46                     {
 47                         flag[obj] = 0;
 48                         if (obj >= num[i])
 49                         {
 50                             d = Math.Abs(obj - num[i]);               //電梯與發出請求的樓層的距離
 51                             //找出最短距離的電梯,將距離最近的電梯號賦給select
 52                             if (min > d)
 53                             {
 54 
 55                                 min = d;
 56                                 select = i;
 57                                 ele_flag[i] = 1;
 58                             }
 59                         }
 60                         if (obj < num[i] && min == 22)
 61                         {
 62 
 63                             button_Click();
 64                         }
 65 
 66                     }
 67                     if (ele_flag[i] == -1 && flag[obj] == -1)      //電梯下降
 68                     {
 69                         flag[obj] = 0;
 70                         if (obj <= num[i])
 71                         {
 72                             d = Math.Abs(obj - num[i]);               //電梯與發出請求的樓層的距離
 73                             d = Math.Abs(obj - num[i]);
 74                             //找出最短距離的電梯,將距離最近的電梯號賦給select
 75                             if (min > d)
 76                             {
 77                                 min = d;
 78                                 select = i;
 79                                 ele_flag[i] = -1;
 80 
 81                             }
 82                         }
 83                         if (obj > num[i] && min == 22)
 84                         {
 85                             
 86                             button_Click();
 87                         }
 88                     }
 89 
 90                 }
 91             }
 92             if (select == 0)
 93             {  
 94                 obj_num[select]++;
 95                 floor_num[0,obj] = obj;
 96                 if (ele_flag[0] == 1 && obj > floortop[select])
 97                 {
 98                     floortop[select] = obj;
 99                 }
100                 if(obj_num[select]==1)
101                 {
102                     
103                     ele1 = new Thread(new ThreadStart(run1));
104                     ele1.Start();
105                 }
106             }
107             if (select == 1)
108             {
109                     obj_num[select]++;
110                     floor_num[1,obj] = obj;
111                      if (ele_flag[0] == 1 && obj > floortop[select])
112                      {
113                         floortop[select] = obj;
114                      }
115                      if (obj_num[select] == 1)
116                      {
117                          ele2 = new Thread(new ThreadStart(run2));
118                          ele2.Start();
119                      }
120             }
121             if (select == 2)
122             {
123                     obj_num[select]++;
124                     floor_num[2,obj] = obj;
125                      if (ele_flag[0] == 1 && obj > floortop[select])
126                     {
127                         floortop[select] = obj;
128                     }
129                      if (obj_num[select] == 1)
130                      {
131                          ele3 = new Thread(new ThreadStart(run3));
132                          ele3.Start();
133                      }
134             }
135             if (select == 3)
136             {
137                     obj_num[select]++;
138                     floor_num[3,obj] = obj;
139                      if (ele_flag[0] == 1 && obj > floortop[select])
140                     {
141                         floortop[select] = obj;
142                     }
143                      if (obj_num[select] == 1)
144                      {
145                          ele4 = new Thread(new ThreadStart(run4));
146                          ele4.Start();
147                      }
148             }
149 
150           
151         }

 

另附截圖一張:

完美的實現還在設計之中。。。

小組成員 2014.3.13 2014.3.14 2014.3.15 2014.3.16
李帥 19:21-20:30 對周一電梯實地考察的結果進行了分析,確定了原來的一些不確定因素,比如說電梯向上運行若到達某層時會不會響應向下的請求等,在網上查閱了資料,決定采用線程來解決問題 16:20-17:43對線程進行學習,
並向同學請教相關問題
12:20-13:10對最初的代碼進行交流,由於某些原因轉戰回宿舍,對局部代碼進行測試以及修改   16:07—17:25充當駕駛員的角色對函數進行修改以及測試 09:20-11:23對各部分函數進行測試以及修改
張碩 14:30-16:00查閱書籍查看線程的屬性以及相關函數,並對李帥先前設計的界面初稿進行審閱。 12:20-13:10對最初的代碼進行交流,由於某些原因轉戰回宿舍,對電梯外部函數進行設計。   16:07-17:25 充當領航員對李帥同學的代碼進行挑錯處理18:47-21:45進行界面的設計,對各個部件的布局做到良好的調整,使界面看着更舒服。 19:50-20:39,完成博客
的發表


免責聲明!

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



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