Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
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);
        }