コード例 #1
1
ファイル: Form1.cs プロジェクト: Arthyom/SO-s
        private void button2_Click(object sender, EventArgs e)
        {
            string ruta = this.ruta;
            StreamReader lectr = new StreamReader(ruta);
            int numProc = Convert.ToInt16(lectr.ReadLine());
            lectr.Close();

            StreamWriter Escritor = new StreamWriter(@"C: \Users\frodo\Desktop\Planificacion\GantAlterno.txt");

            // cola de usados
            Queue usados = new Queue(numProc);

            // crear vector de procesos
            Proceso[] vectProc = new Proceso[numProc];
            for (int i = 0; i < vectProc.Length; i++)
                vectProc[i] = new Proceso();

            // crear cola de procesos
            Queue colaProc = new Queue(numProc);
            Queue colaCop = new Queue(numProc);

            // crear un planificador
            Planificador plnfcdr1 = new Planificador();

            // leer archivos y meterlos en el vector
            Planificador.leerArchivo(vectProc,ruta);
            int llegada = vectProc[0].GSTiempoLLegada;

            int maximo = 0;

            foreach (Proceso P in vectProc)
                            maximo += P.GSduracion;

            plnfcdr1.gant = new string[numProc, maximo*2];
            plnfcdr1.InicarGant(numProc, maximo*2);

            // decidir segund el algoritmo de planificacion
            switch (this.comboBox1.Text)
            {

                case "SJF":
                    int espera = 1;
                    int Tinicio = 1;
                    int Tfinal = 1;
                    int yValue = 1;
                    int cont = 0;

                    while ( cont < numProc  )
                     {
                        Proceso Procesado = plnfcdr1.PlanificarSJF(colaProc, vectProc, Tinicio,Tfinal, espera);
                        plnfcdr1.LLenarGant(Procesado, cont, maximo);

                            if ( !this.GantAlterno.Checked )
                                Graficar(Procesado, yValue, espera);

                        colaCop.Enqueue(Procesado);
                        if (Procesado != null)
                        {

                            Tinicio += Procesado.GSTiempoLLegada;
                            Tfinal += Procesado.GSduracion;
                            espera += Procesado.GSduracion;

                            this.display(Procesado);

                            yValue++;
                            cont++;

                        }
                        Tfinal++;
                      }
                break;

                case "FcFs":

                    yValue = 1;
                    espera = 1;
                    foreach(Proceso p in vectProc)
                    {
                        colaProc.Enqueue(p);
                        Proceso Procesado = plnfcdr1.PlanificarFcFs(colaProc, espera);
                        plnfcdr1.LLenarGant(Procesado, yValue -1, maximo);

                        colaCop.Enqueue(Procesado);
                        Graficar(Procesado, yValue, espera);
                        espera += Procesado.GSduracion  ;
                        yValue++;
                        this.display(Procesado);
                    }

                    break;

                case "SJFX":

                    ArrayList l = new ArrayList();
                    foreach (Proceso p in vectProc)
                        l.Add(p);
                    int i = 0;
                   Queue Procesados =  plnfcdr1.PlanificarSJFX(l);
                    foreach (Proceso p in Procesados)
                    {
                        this.display(p);
                        try
                        {
                            this.GraficarProceso(p, i + 1 , p.Tinicio);
                            i++;
                        }
                        catch(Exception Ex)
                        {
                            i++;
                        }
                    }

                    colaCop = Procesados;

                    break;

                case "SRTF":
                    // meter procesos a la lista
                    ArrayList ListaProc = new ArrayList();
                    foreach (Proceso P in vectProc )
                        ListaProc.Add(P);

                    i = 0;
                    Queue ProcesadosSRTF = plnfcdr1.PlanificarSRFT(ListaProc);

                    // dar salida grafica
                    foreach( Proceso P in ProcesadosSRTF )
                    {
                        this.display(P);
                        try
                        {
                            this.GraficarProceso(P, i + 1, P.Tinicio);
                        }
                        finally
                        {
                            i++;
                        }
                    }
                    colaCop = ProcesadosSRTF;
                    break;

                case "Round Robin":
                    // meter procesos a la lista
                    ArrayList ListaProcRR = new ArrayList();
                    foreach (Proceso P in vectProc)
                        ListaProcRR.Add(P);

                    i = 0;

                    // planificar RR
                    Queue ProcesadosRR = plnfcdr1.PlanificarRR(ListaProcRR);

                    // graficar procesos
                    foreach (Proceso P in ProcesadosRR)
                    {
                        this.display(P);
                        try
                        {
                            this.GraficarProceso(P, i + 1, P.Tinicio);
                        }
                        finally
                        {
                            i++;
                        }
                    }
                    colaCop = ProcesadosRR;
                    break;

                case "Priority":
                    ArrayList lentrada = new ArrayList();
                    foreach (Proceso p in vectProc)
                        lentrada.Add(p);

                    colaCop = plnfcdr1.PlanificarPrioridad(lentrada);
                    i = 1;
                    foreach (Proceso p in colaCop)
                    {
                        this.display(p);
                        this.GraficarProceso(p, i, p.Tinicio);
                        i++;

                    }
                    break;

                case "PriorityX":
                    ArrayList lentradaP = new ArrayList();
                    foreach (Proceso p in vectProc)
                        lentradaP.Add(p);

                    colaCop = plnfcdr1.PlanificarPrioridadX(lentradaP);
                    i = 1;
                    foreach (Proceso p in colaCop)
                    {
                        this.display(p);
                        this.GraficarProceso(p, i, p.Tinicio);
                        i++;

                    }
                    break;

                case "HRRN":

                    ArrayList ListaEntrada  = new ArrayList();
                    ArrayList ListaEstatica = new ArrayList();
                    foreach (Proceso p in vectProc)
                    {
                        ListaEntrada.Add(p);
                        ListaEstatica.Add(p);
                    }

                    colaCop = plnfcdr1.PlanificarHRRN(ListaEntrada);

                    foreach( Proceso p in colaCop)
                    {
                        this.display(p);
                        this.GraficarProceso(p, 1+ plnfcdr1.ConvertIndx(p, ListaEstatica), p.Tinicio);
                    }

                    break;
            }

            // poner el tiempo promedio en la etiqeta

            plnfcdr1.ImprimirGantTxt(Escritor, numProc, maximo*2, vectProc);
            Escritor.Close();
            if (this.GantAlterno.Checked)
                this.DsplGantAlt();

            this.lblPromedio.Text = string.Format("{0:C2}" , Convert.ToString( (float)plnfcdr1.GetStdstcs(colaCop, numProc) ));
        }