Exemplo n.º 1
0
        public Proceso readFromDisk()
        {
            String       linea;
            Proceso      regresa = new Proceso();
            StreamReader sr      = new StreamReader(suspendedFile);

            linea = sr.ReadLine();
            var strs = linea.Split('|');

            regresa.setBloqueado(Int32.Parse(strs[0]));
            if (strs[1] == "True")
            {
                regresa.setError();
            }
            regresa.setEspera(Int32.Parse(strs[2]));
            regresa.setEstado(Int32.Parse(strs[3]));
            regresa.setFinalizacion(Int32.Parse(strs[4]));
            regresa.setID(strs[5]);
            regresa.setLlegada(Int32.Parse(strs[6]));
            regresa.setOpe(strs[7]);
            if (strs[8] == "True")
            {
                regresa.setPrimera();
            }
            regresa.setRespuesta(Int32.Parse(strs[9]));
            regresa.setResult(Int32.Parse(strs[10]));
            regresa.setServicio(Int32.Parse(strs[11]));
            regresa.setSize(Int32.Parse(strs[12]));
            regresa.setTime(Int32.Parse(strs[13]));
            regresa.setTrans(Int32.Parse(strs[14]));
            linea = sr.ReadToEnd();

            /*var rest = linea.Split('\n');
             * List<String> listaNueva = rest.OfType<String>().ToList();
             * listaNueva.RemoveAt(0);*/
            sr.Close();
            return(regresa);
        }
Exemplo 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;
            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;

            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;
                    }
                    quantumActual = 0;
                    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);
                        }
                        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;
                                }
                            }
                        }
                        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 (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);

                            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();
        }
Exemplo n.º 3
0
        public void procesado()
        {
            int cont = 0;
            int sig = 0;
            int rest = cantidad;
            int total, restante;
            int conto = 0;
            int tme;
            int tres = 0;
            int servicioTranscurrido = 0;

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

            foreach (Proceso p in lista)
            {
                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 (bloqueados.Count > 0)
                        {
                            listBox3.Items.Clear();
                            int cDelete = 0;
                            foreach (Proceso b in bloqueados)
                            {
                                b.setBloqueado(b.getBloqueado() + 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();
                    }
                    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++)
                    {
                        this.Refresh();
                        if (!pause)
                        {
                            Thread.Sleep(700);
                        }
                        else
                        {
                            try
                            {
                                Thread.Sleep(Timeout.Infinite);
                            }
                            catch (ThreadInterruptedException)
                            { }
                        }

                        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 (bloqueados.Count > 0)
                        {
                            listBox3.Items.Clear();
                            int cDelete = 0;
                            foreach (Proceso b in bloqueados)
                            {
                                b.setBloqueado(b.getBloqueado() + 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
                        {
                            n.resolver();
                            listBox2.Items.Add(n.getID() + " \t" + n.getOpe() + "\t\t" + n.getResult().ToString());
                            tres--;
                            n.setFinalizacion(conto);
                            n.setServicio(n.getTime());
                            terminados.Add(n);
                        }
                    }
                    sig++;
                    aux.RemoveAt(0);
                    if (listBox2.Items.Count == cantidad)
                    {
                        break;
                    }
                }
            }
            BCP bcp = new BCP(terminados);

            bcp.ShowDialog();
        }
Exemplo n.º 4
0
        public void procesado()
        {
            int cont = 0;
            int sig  = 0;

            rest = cantidad;
            int  total, restante;
            int  conto = 0;
            int  tme;
            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 && !AnySuspended())
            {
                ///
                ///

                /*writeToDisk(p);
                 * Console.WriteLine(AnySuspended());
                 * if (AnySuspended())
                 * {
                 *  if (p.getID() == "5")
                 *  {
                 *      readFromDisk();
                 *  }
                 *
                 * }*/

                ///
                ///
                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 (suspender)
                        {
                            if (bloqueados.Count > 0)
                            {
                                Proceso first;
                                first = bloqueados.First <Proceso>();
                                limpiaTabla(first.getID());
                                bloqueados.RemoveAt(0);
                                listBox3.Items.RemoveAt(0);
                                writeToDisk(first);
                                if (lista.Count > 1)
                                {
                                    p    = lista.ElementAt <Proceso>(1);
                                    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();
                                        }
                                        lista.RemoveAt(0);
                                    }
                                }
                            }
                            suspender = 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());///what
                                bloqueados.RemoveAt(k);
                            }
                        }

                        if (regresa)
                        {
                            if (AnySuspended())
                            {
                                Proceso lys;
                                lys = readFromDisk();
                                if (isAvailable(lys.getSize()))
                                {
                                    pintaTabla(lys.getSize(), Color.Blue, lys.getID());
                                    listBox1.Items.Add(lys.getID() + "\t\t" + lys.getTime() + "\t" + lys.getTrans());
                                    aux.Add(lys);
                                    recorreTxt();
                                }
                            }
                            regresa = false;
                        }
                        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 (suspender)
                        {
                            if (bloqueados.Count > 0)
                            {
                                Proceso first;
                                first = bloqueados.First <Proceso>();
                                limpiaTabla(first.getID());
                                bloqueados.RemoveAt(0);
                                listBox3.Items.RemoveAt(0);
                                writeToDisk(first);
                                if (lista.Count > 1)
                                {
                                    p    = lista.ElementAt <Proceso>(1);
                                    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
                                        {
                                            //Console.WriteLine("cc");
                                            next            = lista.ElementAt <Proceso>(1);
                                            labelIDsig.Text = next.getID().ToString();
                                            labelSize.Text  = next.getSize().ToString();
                                        }
                                        lista.RemoveAt(0);
                                    }
                                }
                            }
                            suspender = false;
                        }
                        if (regresa)
                        {
                            if (AnySuspended())
                            {
                                Proceso lys;
                                lys = readFromDisk();
                                if (isAvailable(lys.getSize()))
                                {
                                    pintaTabla(lys.getSize(), Color.Blue, lys.getID());
                                    listBox1.Items.Add(lys.getID() + "\t\t" + lys.getTime() + "\t" + lys.getTrans());
                                    aux.Add(lys);
                                    recorreTxt();
                                }
                            }
                            regresa = false;
                        }
                        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);
                //Console.WriteLine("gg");
            }
            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();
        }