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