Пример #1
0
        public void procesado()
        {
            int cont = 0;
            int sig = 0;
            int rest = cantidad / 3;
            int total, restante;
            int lote  = 1;
            int conto = 0;

            labelContador.Text   = sig.ToString();
            labelPendientes.Text = rest.ToString();
            List <Proceso> aux  = new List <Proceso>();
            List <Proceso> aux2 = new List <Proceso>();

            foreach (Proceso p in lista)
            {
                listBox1.Items.Add(p.getID() + "\t\t" + p.getTime() + "\t" + p.getTrans());
                aux.Add(p);
                cont++;
                if ((cont % 3) == 0 || cont == cantidad)
                {
                    while (aux.Count > 0)
                    {
                        Proceso n = aux.First <Proceso>();
                        labelNombre.Text = n.getName();
                        labelID.Text     = n.getID();
                        labelOpe.Text    = n.getOpe();
                        labelTme.Text    = n.getTime().ToString();
                        total            = 0;
                        restante         = n.getTime();
                        labelTt.Text     = n.getTrans().ToString();
                        labelTr.Text     = (n.getTime() - n.getTrans()).ToString();
                        int i = n.getTrans();
                        if (n.getTrans() != 0)
                        {
                            total    = i;
                            restante = n.getTime() - i;
                        }
                        for (int j = i; j < n.getTime(); j++)
                        {
                            this.Refresh();
                            if (!pause)
                            {
                                Thread.Sleep(700);
                            }
                            else
                            {
                                try
                                {
                                    Thread.Sleep(Timeout.Infinite);
                                }
                                catch (ThreadInterruptedException)
                                {}
                            }
                            total++;
                            conto++;
                            restante--;
                            labelTt.Text       = total.ToString();
                            labelTr.Text       = restante.ToString();
                            labelContador.Text = conto.ToString();
                            if (error)
                            {
                                j = n.getTime();
                            }
                            if (interrupt)
                            {
                                n.setTrans(total);
                                j = n.getTime();
                                listBox1.Items.Add(n.getID() + "\t\t" + n.getTime() + "\t" + n.getTrans());
                                aux.Add(n);
                            }
                        }
                        listBox1.Items.RemoveAt(0);
                        if (interrupt)
                        {
                            interrupt = false;
                        }
                        else
                        {
                            if (error)
                            {
                                listBox2.Items.Add(n.getID() + " \t" + n.getOpe() + "\t\tError");
                                error = false;
                            }
                            else
                            {
                                n.resolver();
                                listBox2.Items.Add(n.getID() + " \t" + n.getOpe() + "\t\t" + n.getResult().ToString());
                            }
                        }
                        sig++;
                        aux.RemoveAt(0);
                    }
                    lote++;
                    rest--;
                    if (rest == -1)
                    {
                        rest = 0;
                    }
                    listBox2.Items.Add("-----------------------------------------------------");
                    labelPendientes.Text = rest.ToString();
                    aux.Clear();
                }
            }
            MessageBox.Show("Fin de Simulación");
        }
Пример #2
0
        public void procesado()
        {
            int cont = 0;
            int sig  = 0;

            rest = cantidad;
            int total, restante;
            int conto = 0;
            int tme;
            int tres = 0;
            int servicioTranscurrido = 0;

            labelContador.Text   = sig.ToString();
            labelPendientes.Text = cantidad.ToString();

            BCP bcp;

            aux        = new List <Proceso>();
            bloqueados = new List <Proceso>();
            terminados = new List <Proceso>();

            Proceso p;
            Proceso nP;

            while (lista.Count != 0)
            {
                p = lista.First <Proceso>();
                listBox1.Items.Add(p.getID() + "\t\t" + p.getTime() + "\t" + p.getTrans());
                p.setLlegada(conto);
                aux.Add(p);
                cont++;
                tres++;
                rest--;
                labelPendientes.Text = rest.ToString();


                while (tres == 3 || cont == cantidad)
                {
                    while (aux.Count == 0)
                    {
                        labelID.Text  = "";
                        labelOpe.Text = "";
                        labelTme.Text = "";
                        labelTt.Text  = "";
                        labelTr.Text  = "";
                        this.Refresh();
                        if (!pause)
                        {
                            Thread.Sleep(700);
                        }
                        else
                        {
                            try
                            {
                                Thread.Sleep(Timeout.Infinite);
                            }
                            catch (ThreadInterruptedException)
                            { }

                            /*if (mostrar)
                             * {
                             *  mostrar = false;
                             *  recolecta();
                             *  bcp = new BCP(all);
                             *  bcp.ShowDialog();
                             * }*/
                        }
                        if (bloqueados.Count > 0)
                        {
                            listBox3.Items.Clear();
                            int cDelete = 0;
                            foreach (Proceso b in bloqueados)
                            {
                                b.setBloqueado(b.getBloqueado() + 1);
                                b.setEspera(b.getEspera() + 1);
                                if (b.getBloqueado() < 10)
                                {
                                    listBox3.Items.Add(b.getID() + "\t\t" + b.getBloqueado());
                                }
                                else
                                {
                                    listBox1.Items.Add(b.getID() + "\t\t" + b.getTime() + "\t" + b.getTrans());
                                    b.setBloqueado(-1);
                                    aux.Add(b);
                                    cDelete++;
                                }
                            }
                            for (int k = 0; k < cDelete; k++)
                            {
                                bloqueados.RemoveAt(k);
                            }
                        }
                        conto++;
                        labelContador.Text = conto.ToString();
                        if (nuevo)
                        {
                            if (tres == 3)
                            {
                                //rest++;
                                labelPendientes.Text = rest.ToString();
                            }
                            else
                            {
                                nP = lista.Last <Proceso>();
                                listBox1.Items.Add(nP.getID() + "\t\t" + nP.getTime() + "\t" + nP.getTrans());
                                nP.setLlegada(conto);
                                aux.Add(nP);
                                tres++;
                                cont++;
                                rest--;
                                lista.RemoveAt(lista.Count - 1);
                            }
                            nuevo = false;
                        }
                    }
                    listBox1.Items.RemoveAt(0);
                    Proceso n = aux.First <Proceso>();
                    if (!n.getPrimera())
                    {
                        n.setRespuesta(conto - n.getLlegada());
                        n.setPrimera();
                    }

                    labelID.Text  = n.getID();
                    labelOpe.Text = n.getOpe();
                    labelTme.Text = n.getTime().ToString();
                    total         = 0;
                    restante      = n.getTime();
                    labelTt.Text  = n.getTrans().ToString();
                    labelTr.Text  = (n.getTime() - n.getTrans()).ToString();
                    int i = n.getTrans();
                    if (n.getTrans() != 0)
                    {
                        total    = i;
                        restante = n.getTime() - i;
                    }
                    tme = n.getTime();
                    if (aux.Count == 0)
                    {
                        tme = 10;
                    }
                    for (int j = i; j < tme; j++)
                    {
                        n.setServicio(total + 1);
                        foreach (Proceso d in aux)
                        {
                            if (d.getID() != n.getID())
                            {
                                d.setEspera(d.getEspera() + 1);
                            }
                        }
                        if (!pause)
                        {
                            Thread.Sleep(800);
                        }
                        else
                        {
                            try
                            {
                                Thread.Sleep(Timeout.Infinite);
                            }
                            catch (ThreadInterruptedException)
                            { }

                            /*if (mostrar)
                             * {
                             *  mostrar = false;
                             *  recolecta();
                             *  bcp = new BCP(all);
                             *  bcp.ShowDialog();
                             * }*/
                        }
                        //this.Refresh();

                        total++;
                        restante--;

                        labelTt.Text = total.ToString();
                        labelTr.Text = restante.ToString();
                        conto++;
                        labelContador.Text = conto.ToString();



                        if (error)
                        {
                            servicioTranscurrido = j;
                            j = n.getTime();
                        }
                        if (interrupt)
                        {
                            n.setTrans(total);
                            j = n.getTime();
                            bloqueados.Add(n);
                        }
                        if (nuevo)
                        {
                            if (tres == 3)
                            {
                                //rest++;
                                labelPendientes.Text = rest.ToString();
                            }
                            else
                            {
                                nP = lista.Last <Proceso>();
                                listBox1.Items.Add(nP.getID() + "\t\t" + nP.getTime() + "\t" + nP.getTrans());
                                nP.setLlegada(conto);
                                aux.Add(nP);
                                tres++;
                                cont++;
                                rest--;
                                lista.RemoveAt(lista.Count - 1);
                            }
                            nuevo = false;
                        }
                        if (bloqueados.Count > 0)
                        {
                            listBox3.Items.Clear();
                            int cDelete = 0;
                            foreach (Proceso b in bloqueados)
                            {
                                b.setBloqueado(b.getBloqueado() + 1);
                                b.setEspera(b.getEspera() + 1);
                                if (b.getBloqueado() < 10)
                                {
                                    listBox3.Items.Add(b.getID() + "\t\t" + b.getBloqueado());
                                }
                                else
                                {
                                    listBox1.Items.Add(b.getID() + "\t\t" + b.getTime() + "\t" + b.getTrans());
                                    b.setBloqueado(-1);
                                    aux.Add(b);
                                    cDelete++;
                                }
                            }
                            for (int k = 0; k < cDelete; k++)
                            {
                                bloqueados.RemoveAt(k);
                            }
                        }
                        if (bloqueados.Count == 3 || (bloqueados.Count + listBox2.Items.Count) == cantidad)
                        {
                            labelID.Text  = "";
                            labelOpe.Text = "";
                            labelTme.Text = "";
                            labelTt.Text  = "";
                            labelTr.Text  = "";
                        }
                    }

                    if (interrupt)
                    {
                        interrupt = false;
                    }
                    else
                    {
                        if (error)
                        {
                            if (bloqueados.Count != 3 && (bloqueados.Count + listBox2.Items.Count) != cantidad)
                            {
                                listBox2.Items.Add(n.getID() + " \t" + n.getOpe() + "\t\tError");
                                tres--;
                                error = false;
                                n.setFinalizacion(conto);
                                n.setError();
                                n.setServicio(servicioTranscurrido);
                                n.setRespuesta(n.getRespuesta() + 1);
                                terminados.Add(n);
                            }
                        }
                        else
                        {
                            tres--;
                            n.setFinalizacion(conto);
                            n.setServicio(n.getTime());
                            n.resolver();
                            terminados.Add(n);

                            listBox2.Items.Add(n.getID() + " \t" + n.getOpe() + "\t\t" + n.getResult().ToString());
                        }
                    }
                    sig++;
                    aux.RemoveAt(0);
                    if (listBox2.Items.Count == cantidad)
                    {
                        break;
                    }
                }
                lista.RemoveAt(0);
            }
            labelID.Text  = "";
            labelOpe.Text = "";
            labelTme.Text = "";
            labelTt.Text  = "";
            labelTr.Text  = "";
            all.Clear();
            foreach (Proceso v in terminados)
            {
                v.setEstado(3);
                all.Add(v);
            }
            bcp = new BCP(terminados);
            bcp.ShowDialog();
        }
Пример #3
0
        public void procesado()
        {
            int cont = 0;
            int sig  = 0;

            rest = cantidad;
            int  total, restante;
            int  conto = 0;
            int  tme;
            int  tres = 0;
            int  servicioTranscurrido = 0;
            int  quantumActual;
            bool finQuantum = false;

            labelContador.Text   = sig.ToString();
            labelPendientes.Text = cantidad.ToString();
            labelQuantum.Text    = quantum.ToString();

            BCP bcp;

            aux        = new List <Proceso>();
            bloqueados = new List <Proceso>();
            terminados = new List <Proceso>();

            Proceso p;
            Proceso nP;
            Proceso next;

            while (lista.Count != 0)
            {
                p    = lista.First <Proceso>();
                next = p;
                if (isAvailable(p.getSize()))
                {
                    pintaTabla(p.getSize(), Color.Blue, p.getID());
                    listBox1.Items.Add(p.getID() + "\t\t" + p.getTime() + "\t" + p.getTrans());
                    p.setLlegada(conto);
                    aux.Add(p);
                    cont++;
                    rest--;
                    labelPendientes.Text = rest.ToString();
                    if (p == lista.Last <Proceso>())
                    {
                        labelIDsig.Text = "";
                        labelSize.Text  = "";
                    }
                    else
                    {
                        next            = lista.ElementAt <Proceso>(1);
                        labelIDsig.Text = next.getID().ToString();
                        labelSize.Text  = next.getSize().ToString();
                    }
                }


                //while (tres == 3 || cont == cantidad)
                while (!isAvailable(next.getSize()) || cont == cantidad)
                {
                    while (aux.Count == 0)
                    {
                        labelID.Text  = "";
                        labelOpe.Text = "";
                        labelTme.Text = "";
                        labelTt.Text  = "";
                        labelTr.Text  = "";
                        this.Refresh();
                        if (!pause)
                        {
                            Thread.Sleep(700);
                        }
                        else
                        {
                            try
                            {
                                Thread.Sleep(Timeout.Infinite);
                            }
                            catch (ThreadInterruptedException)
                            { }

                            /*if (mostrar)
                             * {
                             *  mostrar = false;
                             *  recolecta();
                             *  bcp = new BCP(all);
                             *  bcp.ShowDialog();
                             * }*/
                        }
                        if (bloqueados.Count > 0)
                        {
                            listBox3.Items.Clear();
                            int cDelete = 0;
                            foreach (Proceso b in bloqueados)
                            {
                                b.setBloqueado(b.getBloqueado() + 1);
                                b.setEspera(b.getEspera() + 1);
                                if (b.getBloqueado() < 10)
                                {
                                    listBox3.Items.Add(b.getID() + "\t\t" + b.getBloqueado());
                                }
                                else
                                {
                                    listBox1.Items.Add(b.getID() + "\t\t" + b.getTime() + "\t" + b.getTrans());
                                    b.setBloqueado(-1);
                                    aux.Add(b);
                                    cDelete++;
                                }
                            }
                            for (int k = 0; k < cDelete; k++)
                            {
                                ActualizaColor(Color.Blue, bloqueados.ElementAt <Proceso>(k).getID());///what
                                bloqueados.RemoveAt(k);
                            }
                        }
                        conto++;
                        labelContador.Text = conto.ToString();
                        if (nuevo)
                        {
                            if (lista.Count > 2)
                            {
                                labelPendientes.Text = rest.ToString();
                            }
                            else
                            {
                                nP   = lista.Last <Proceso>();
                                next = nP;
                                if (isAvailable(nP.getSize()))
                                {
                                    pintaTabla(nP.getSize(), Color.Blue, nP.getID());
                                    listBox1.Items.Add(nP.getID() + "\t\t" + nP.getTime() + "\t" + nP.getTrans());
                                    nP.setLlegada(conto);
                                    aux.Add(nP);
                                    cont++;
                                    rest--;
                                    lista.RemoveAt(lista.Count - 1);
                                    labelPendientes.Text = rest.ToString();
                                    labelIDsig.Text      = "";
                                    labelSize.Text       = "";
                                }
                                else
                                {
                                    labelPendientes.Text = rest.ToString();
                                    labelIDsig.Text      = next.getID().ToString();
                                    labelSize.Text       = next.getSize().ToString();
                                }
                            }
                            nuevo = false;
                        }
                    }
                    listBox1.Items.RemoveAt(0);
                    Proceso n = aux.First <Proceso>();
                    if (!n.getPrimera())
                    {
                        n.setRespuesta(conto - n.getLlegada());
                        n.setPrimera();
                    }

                    labelID.Text  = n.getID();
                    labelOpe.Text = n.getOpe();
                    labelTme.Text = n.getTime().ToString();
                    total         = 0;
                    restante      = n.getTime();
                    labelTt.Text  = n.getTrans().ToString();
                    labelTr.Text  = (n.getTime() - n.getTrans()).ToString();
                    int i = n.getTrans();
                    if (n.getTrans() != 0)
                    {
                        total    = i;
                        restante = n.getTime() - i;
                    }
                    tme = n.getTime();
                    if (aux.Count == 0)
                    {
                        tme = 10;
                    }
                    quantumActual = 0;
                    ActualizaColor(Color.Red, n.getID());
                    for (int j = i; j < tme; j++)
                    {
                        n.setServicio(total + 1);
                        foreach (Proceso d in aux)
                        {
                            if (d.getID() != n.getID())
                            {
                                d.setEspera(d.getEspera() + 1);
                            }
                        }
                        if (!pause)
                        {
                            Thread.Sleep(800);
                        }
                        else
                        {
                            try
                            {
                                Thread.Sleep(Timeout.Infinite);
                            }
                            catch (ThreadInterruptedException)
                            { }

                            /*if (mostrar)
                             * {
                             *  mostrar = false;
                             *  recolecta();
                             *  bcp = new BCP(all);
                             *  bcp.ShowDialog();
                             * }*/
                        }
                        //this.Refresh();

                        total++;
                        restante--;

                        labelTt.Text = total.ToString();
                        labelTr.Text = restante.ToString();
                        conto++;
                        labelContador.Text = conto.ToString();



                        if (error)
                        {
                            servicioTranscurrido = j;
                            j = n.getTime();
                            limpiaTabla(n.getID());
                        }
                        if (interrupt)
                        {
                            n.setTrans(total);
                            j = n.getTime();
                            bloqueados.Add(n);
                            ActualizaColor(Color.Purple, n.getID());
                        }
                        else
                        {
                            quantumActual++;
                            if (j != tme - 1)
                            {
                                if (quantumActual == quantum)
                                {
                                    n.setTrans(total);
                                    j = n.getTime();
                                    listBox1.Items.Add(n.getID() + "\t\t" + n.getTime() + "\t" + n.getTrans());
                                    aux.Add(n);
                                    finQuantum = true;
                                    ActualizaColor(Color.Blue, n.getID());
                                }
                            }
                        }
                        if (nuevo)
                        {
                            //Console.WriteLine(lista.Count);
                            if (lista.Count > 2)
                            {
                                labelPendientes.Text = rest.ToString();
                                //Console.WriteLine("g");
                            }
                            else
                            {
                                nP   = lista.Last <Proceso>();
                                next = nP;
                                if (isAvailable(nP.getSize()))
                                {
                                    pintaTabla(nP.getSize(), Color.Blue, nP.getID());
                                    listBox1.Items.Add(nP.getID() + "\t\t" + nP.getTime() + "\t" + nP.getTrans());
                                    nP.setLlegada(conto);
                                    aux.Add(nP);
                                    cont++;
                                    rest--;
                                    lista.RemoveAt(lista.Count - 1);
                                    labelPendientes.Text = rest.ToString();
                                    labelIDsig.Text      = "";
                                    labelSize.Text       = "";
                                }
                                else
                                {
                                    labelPendientes.Text = rest.ToString();
                                    labelIDsig.Text      = next.getID().ToString();
                                    labelSize.Text       = next.getSize().ToString();
                                }
                            }
                            nuevo = false;
                        }
                        if (bloqueados.Count > 0)
                        {
                            listBox3.Items.Clear();
                            int cDelete = 0;
                            foreach (Proceso b in bloqueados)
                            {
                                b.setBloqueado(b.getBloqueado() + 1);
                                b.setEspera(b.getEspera() + 1);
                                if (b.getBloqueado() < 10)
                                {
                                    listBox3.Items.Add(b.getID() + "\t\t" + b.getBloqueado());
                                }
                                else
                                {
                                    listBox1.Items.Add(b.getID() + "\t\t" + b.getTime() + "\t" + b.getTrans());
                                    b.setBloqueado(-1);
                                    aux.Add(b);
                                    cDelete++;
                                }
                            }
                            for (int k = 0; k < cDelete; k++)
                            {
                                ActualizaColor(Color.Blue, bloqueados.ElementAt <Proceso>(k).getID());

                                bloqueados.RemoveAt(k);
                            }
                        }
                        if ((bloqueados.Count + listBox2.Items.Count) == cantidad)
                        {
                            labelID.Text  = "";
                            labelOpe.Text = "";
                            labelTme.Text = "";
                            labelTt.Text  = "";
                            labelTr.Text  = "";
                        }
                    }

                    if (interrupt)
                    {
                        interrupt = false;
                    }
                    else if (finQuantum)
                    {
                        finQuantum = false;
                    }
                    else
                    {
                        if (error)
                        {
                            if (bloqueados.Count != 3 && (bloqueados.Count + listBox2.Items.Count) != cantidad)
                            {
                                listBox2.Items.Add(n.getID() + " \t" + n.getOpe() + "\t\tError");
                                //tres--;
                                error = false;
                                n.setFinalizacion(conto);
                                n.setError();
                                n.setServicio(servicioTranscurrido);
                                n.setRespuesta(n.getRespuesta() + 1);
                                terminados.Add(n);
                            }
                        }
                        else
                        {
                            //tres--;
                            n.setFinalizacion(conto);
                            n.setServicio(n.getTime());
                            n.resolver();
                            terminados.Add(n);
                            limpiaTabla(n.getID());
                            listBox2.Items.Add(n.getID() + " \t" + n.getOpe() + "\t\t" + n.getResult().ToString());
                        }
                    }
                    sig++;
                    aux.RemoveAt(0);
                    if (listBox2.Items.Count == cantidad)
                    {
                        break;
                    }
                }
                lista.RemoveAt(0);
            }
            labelID.Text  = "";
            labelOpe.Text = "";
            labelTme.Text = "";
            labelTt.Text  = "";
            labelTr.Text  = "";
            if (all.Count != 0)
            {
                all.Clear();
            }
            foreach (Proceso v in terminados)
            {
                v.setEstado(3);
                all.Add(v);
            }
            bcp = new BCP(terminados);
            bcp.ShowDialog();
        }