Exemple #1
0
        /// <summary>
        /// Simula a execução do escalonador
        /// </summary>
        public void Run()
        {
            CPU cpu = new CPU();
            int pos = 0;

            while (!TodosVazia() && pos < TodasFilasProcessos.Length) // Enquanto todas as filas de processos não estiverem vazias
            {
                while (!TodasFilasProcessos[pos].Vazio())             // Enquanto uma fila especifica não estiver vazia
                {
                    //Retirar da fila e da listView
                    Monitor.Enter(this);

                    Processo processo = (Processo)(TodasFilasProcessos[pos].Retirar());

                    if (processo == null) //alguma thread ficou presa dentro do while RESOLVER ISSO
                    {
                        break;
                    }

                    Controle.RetirarListViewPrioridades(processo);

                    if (Thread.CurrentThread.Name == Controle.thread_cpu0.Name)
                    {
                        Controle.TrocarLabel("Rodando: " + processo.Nome, 0);
                    }
                    else if (Thread.CurrentThread.Name == Controle.thread_cpu1.Name)
                    {
                        Controle.TrocarLabel("Rodando: " + processo.Nome, 1);
                    }

                    Monitor.Exit(this);

                    int reposta = cpu.Run(processo);

                    Monitor.Enter(this);
                    if (reposta < 0)
                    {
                        //não terminou
                        AdicionarProcesso(processo);
                        Controle.InserirListViewPrioridades(processo);
                    }
                    else if (reposta == 0)
                    {
                        //suspendeu
                        AdicionarProcesso(processo);
                        Controle.InserirListViewPrioridades(processo);
                    }
                    else
                    {
                        //terminou
                        Controle.InserirListViewPronto(processo);
                    }
                    Monitor.Exit(this);
                }
                pos++;
            }

            if (Thread.CurrentThread.Name == Controle.thread_cpu0.Name)
            {
                Controle.TrocarLabel("Fim", 0);
            }
            else if (Thread.CurrentThread.Name == Controle.thread_cpu1.Name)
            {
                Controle.TrocarLabel("Fim", 0);
            }

            System.Windows.Threading.Dispatcher.Run();
        }
Exemple #2
0
 public MainWindow()
 {
     InitializeComponent();
     Controle.InicializarThreadAdicional();
 }