• 电梯调度(三)


    续电梯调度(二)

                                                                                                                                                                                                      李帅---张硕

          对开始思路进行修改,使用四个线程(即多线程)来代替四部电梯实例,首先解释一下多线程,多线程指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程以完成各自的任务。通过对线程的运行,启动和挂起来实现对电梯的调度。下面是定义的一些变量:
    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,完成博客
    的发表
  • 相关阅读:
    java设计模式简介
    java设计模式--单例模式
    判断整形回文数
    常用正则表达式 捕获组(分组)
    [转]十分钟搞定Vue搭建
    ActiveX界面已显示,调用方法报undefined的处理办法
    [转]纯js导出json到excel(支持chrome)
    webapi 开启gzip压缩
    webapi下载文件
    iis添加共享目录为虚拟目录
  • 原文地址:https://www.cnblogs.com/zsjy/p/3603817.html
Copyright © 2020-2023  润新知