Exemplo n.º 1
0
        // 先来先服务
        public void FCFS(ref pcb[] m_pcb)
        {
            int n = 0;    //保存先来的服务的索引
            int x = 0, locate_x = 30, locate_y;

            for (int j = 0; j < m_pcb.Length; j++)
            {
                n = FirstIn(ref m_pcb);    //调用求要进入此次的服务进程n的函数
                int k = m_pcb[n].TimeServer;    //服务时间
                Graphics gps = this.CreateGraphics();
                Pen pen_showtable = new Pen(Color.Black , 3f);
                locate_y = 50 * (n + 1) + 33;
                x = 10;
                for (int i = 0; i < k; i++)
                {
                    gps.DrawLine(pen_showtable, locate_x, locate_y, locate_x + x, locate_y);
                    locate_x = locate_x + x;
                    Thread.Sleep(1000);
                    m_pcb[n].TimeServer--;  //还需要的服务时间,循环一次,自减。

                }
                m_pcb[n].finish = true; //标明此个进程已经结束
            }
        }
Exemplo n.º 2
0
 //求最早到达时间的作业,返回此作业在进程控制块数组中的索引号。
 private int FirstIn(ref pcb[] m_pcb)
 {
     int n = 0;
     int m = 10000;  //设置最大服务时间10000个单位
     for (int j = 0; j < m_pcb.Length; j++)
     {
         if (m >= m_pcb[j].TimeComing && !m_pcb[j].finish) //求到达时间最小、并且是没完成的作业。
         {
             m = m_pcb[j].TimeComing; //到达时间最小的作业的到达时间赋给m
             n = j;//保存最小到达时间的索引号
         }
     }
     return n;
 }