Example #1
0
        // Desenfileira um processo, ou seja, remove o primeiro da fila
        public Processo DesenfileirarProcesso()
        {
            mutex.WaitOne();
            if (!FilaVazia())
            {
                ProcessoUnidade aux = Frente.Proximo;
                Frente.Proximo = aux.Proximo;

                aux.Proximo = null;

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

                ContadorProcesso--;

                mutex.ReleaseMutex();
                return(aux.Processo);
            }
            else
            {
                mutex.ReleaseMutex();
                return(null);
            }
        }
Example #2
0
        // Procurar uma Unidade de Processo na fila de Processos (findIndex() na mão)
        public Processo ProcuraProcesso(int indice)
        {
            if (!FilaVazia())
            {
                mutex.WaitOne();

                // Verificação para caso o indice seja maior que o possível
                if (indice >= ContadorProcesso)
                {
                    mutex.ReleaseMutex();
                    return(null);
                }

                ProcessoUnidade aux = Frente.Proximo;

                // Avança o ponteiro até chegar no indice que deseja obter o processo
                for (int cont = 0; cont < indice; cont++)
                {
                    aux = aux.Proximo;
                }

                mutex.ReleaseMutex();
                return(aux.Processo);
            }
            return(null);
        }
Example #3
0
        // Construtor
        public ProcessoFila()
        {
            ProcessoUnidade sentinela = new ProcessoUnidade();

            Atras            = sentinela;
            Frente           = sentinela;
            ContadorProcesso = 0;
        }
Example #4
0
        // Enfileira um novo processo, ou seja, aloca um processo na ultima posição
        public void EnfileirarProcesso(Processo processo)
        {
            mutex.WaitOne();
            ProcessoUnidade processoNovo = new ProcessoUnidade(processo);

            // Caso o tempo de espera não esteja acontecendo, será iniciado
            if (!processoNovo.Processo.TempoEspera.IsRunning)
            {
                processoNovo.Processo.TempoEspera.Start();
            }

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

            Atras.Proximo = processoNovo;
            Atras         = processoNovo;

            ContadorProcesso++;
            mutex.ReleaseMutex();
        }