示例#1
0
        //Procura um processo por índice
        public Processo BuscarProcesso(int indice)
        {
            if (!FilaVazia())
            {
                mutex.WaitOne();
                if (indice >= ContadorDeProcesso) //indice maior do que o limite
                {
                    mutex.ReleaseMutex();
                    return(null);
                }

                ItemProcesso aux = Frente.Proximo;

                for (int contador = 0; contador < indice; contador++) //passa o ponteiro, até chegar no indice desejado
                {
                    aux = aux.Proximo;
                }

                mutex.ReleaseMutex();
                return(aux._Processo);
            }


            return(null);
        }
示例#2
0
        //Remove um processo, sendo sempre o primeiro da fila a ser removido
        public Processo DesenfileirarProcesso()
        {
            mutex.WaitOne();
            if (!FilaVazia())
            {
                ItemProcesso aux = Frente.Proximo;

                Frente.Proximo = aux.Proximo;

                aux.Proximo = null;

                if (Frente.Proximo == null)
                {
                    Tras = Frente;
                }

                ContadorDeProcesso--;

                mutex.ReleaseMutex();
                return(aux._Processo);
            }

            else
            {
                mutex.ReleaseMutex();
                return(null);
            }
        }
示例#3
0
        //Construtor da fila
        public FilaDeProcessos()
        {
            ItemProcesso sentinela = new ItemProcesso();

            Frente             = sentinela;
            Tras               = sentinela;
            ContadorDeProcesso = 0;
        }
示例#4
0
        //Enfileira um processo, colocando-o na ultima posição
        public void EnfileirarProcesso(Processo p)
        {
            mutex.WaitOne();
            ItemProcesso novoProcesso = new ItemProcesso(p);

            if (!novoProcesso._Processo.TempoEmEspera.IsRunning)
            {
                novoProcesso._Processo.TempoEmEspera.Start();
            }

            if (FilaVazia())
            {
                Frente.Proximo = novoProcesso;
            }

            Tras.Proximo = novoProcesso;
            Tras         = novoProcesso;

            ContadorDeProcesso++;
            mutex.ReleaseMutex();
        }