private Processo ComparaPrioridade(Processo processo)
        {
            mutex.WaitOne();

            Processo aux = Program.listaPronto.ComparaPrioridade(processo);

            if (aux != null)
            {
                aux = Program.listaPronto.BuscaRetira(aux);
                mutex.ReleaseMutex();
                return(aux);
            }
            mutex.ReleaseMutex();
            return(null);
        }
Example #2
0
        public Processo Busca(Processo busca)
        {
            Elemento aux = this.atual.Anterior;

            try
            {
                while (aux != null)
                {
                    if (aux.DadoProcesso().Id == busca.Id)
                    {
                        return(aux.DadoProcesso());
                    }
                    aux = aux.Anterior;
                }
                return(null);
            }
            catch
            {
                return(null);
            }
        }
        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);
        }
        public Processo ComparaPrioridade(Processo processo)
        {
            try
            {
                Elemento percorre = this.primeiro;
                Processo aux      = new Processo();

                while (percorre.Proximo != null)
                {
                    if (percorre.Proximo.DadoProcesso().Prioridade > aux.Prioridade)
                    {
                        aux = percorre.Proximo.DadoProcesso();
                    }

                    percorre = percorre.Proximo;
                }
                return(aux);
            }
            catch (System.Exception e)
            {
                MessageBox.Show("Erro na Lista Encadeada (Compara Prioridade). {0} \n", e.ToString(), MessageBoxButtons.OK);
                throw;
            }
        }
Example #5
0
 public Elemento(Elemento elemento)
 {
     this.anterior = elemento.Anterior;
     this.processo = elemento.DadoProcesso();
     this.proximo  = elemento.Proximo;
 }
Example #6
0
 public Elemento(Processo p)
 {
     this.processo = p;
     this.anterior = null;          // os apontadores devem ser definidos na lista na hora de inserir
     this.proximo  = null;          // os apontadores devem ser definidos na lista na hora de inserir
 }
Example #7
0
 public Elemento()
 {
     this.anterior = null;
     this.processo = null;
     this.proximo  = null;
 }
 private void TrocaContexto(Processo novo, ref Processo processo)
 {
     mutex.WaitOne();
     processo = novo;
     mutex.ReleaseMutex();
 }