private void Ciclo(ref Processo processo) { Processo aux = new Processo(); string linha = null; int quantum = processo.QuantidadeCiclo; do { Thread.Sleep(100); quantum = quantum - 1; processo.Descontar(1); AtualizarForm(); if (Thread.CurrentThread.Name == "CPU1") { AdicionarItemTextBoxCPU1(processo.ToString()); } else if (Thread.CurrentThread.Name == "CPU2") { AdicionarItemTextBoxCPU2(processo.ToString()); } if (processo.QuantidadeCiclo == 0) { ProcessoFinalizado(processo); processo = new Processo(-1, null, -1, -1); AlocaProcesso(ref processo); } else { if (Thread.CurrentThread.Name == "CPU1") { aux = executandoCPU1; } else if (Thread.CurrentThread.Name == "CPU2") { aux = executandoCPU2; } aux = ComparaPrioridade(aux); if (aux != null) { TrocaContexto(aux, ref processo); if (Thread.CurrentThread.Name == "CPU1") { AdicionarItemTextBoxCPU1(processo.ToString()); } else if (Thread.CurrentThread.Name == "CPU2") { AdicionarItemTextBoxCPU2(processo.ToString()); } } } } while (quantum != 0); }
private void AlocaProcesso(ref Processo executando) { Processo aux; mutex.WaitOne(); if (executando.Nome == null) { aux = Program.listaPronto.RetiraPrimeiro(); if (aux != null) { executando = aux; if (Thread.CurrentThread.Name == "CPU1") { AdicionarItemTextBoxCPU1(executando.ToString()); } else if (Thread.CurrentThread.Name == "CPU2") { AdicionarItemTextBoxCPU2(executando.ToString()); } } } else if (!Program.listaPronto.Vazia()) { executando = Program.listaPronto.ComparaPrioridade(executando); Program.listaPronto.BuscaRetira(executando); AtualizarForm(); if (Thread.CurrentThread.Name == "CPU1") { AdicionarItemTextBoxCPU1(executando.ToString()); } else if (Thread.CurrentThread.Name == "CPU2") { AdicionarItemTextBoxCPU2(executando.ToString()); } } //this.textBoxListaPronto.Text = Program.listaPronto.ToString(); mutex.ReleaseMutex(); Ciclo(ref executando); }