/// <summary>
        /// Manipula os garfos tirandoos do painel4(Ocupado) e passando  para o painel4(Disponivel)
        /// </summary>
        /// <param name="a">filosofo o qual o garfo sera Utilizado </param>
        private void garfoUtilizado(Filosofo a)
        {
            var aux2 = crialControlGarfo(a);

            painel4.Controls.Add(aux2);
            painel2.Controls.RemoveByKey(aux2.Name);
        }
Exemple #2
0
 public Filosofo(int numeroFilosofo, Filosofo filosofoAnterior)
 {
     this.anterior  = filosofoAnterior;
     this.refeicoes = 0;
     this.garfo     = new Garfo();
     this.nome      = "filosofo " + numeroFilosofo;
 }
        /// <summary>
        /// Cria um controle de um filosofo(utilizado para fazer a interface)
        /// </summary>
        /// <param name="a"></param>
        /// <returns> Control </returns>
        private Control crialControlFilosofo(Filosofo a)
        {
            var aux = new Label();

            aux.Name = (Convert.ToString(a.nome));
            aux.Text = (Convert.ToString(a.nome));
            return(aux);
        }
        public void preencher()
        {
            //Adicionando filosofos na lista
            Filosofo aux = new Filosofo(0, null);

            listaFilosofos.Add(aux);
            for (int i = 1; i < numeroFilosofos; ++i)
            {
                aux = new Filosofo(i, aux);
                listaFilosofos.Add(aux);
            }
            listaFilosofos[0].anterior = listaFilosofos[numeroFilosofos - 1];
        }
        public bool verificaDisponibilidade(Filosofo atual, Filosofo anterior)
        {
            if (atual == null || anterior == null)
            {
                return(false);
            }

            if (atual.garfo.disponivel && anterior.garfo.disponivel)
            {
                return(true);
            }

            else
            {
                return(false);
            }
        }
        /// <summary>
        /// verifica os filosofos com recursos disponiveis e aloca os recursos
        /// </summary>
        /// <param name="atual"></param>
        private void fazRefeicao(Filosofo atual)
        {
            if (controle.verificaDisponibilidade(atual, atual.anterior))
            {
                atual.refeicoes++;
                atual.executado                 = true;
                atual.garfo.disponivel          = false;
                atual.anterior.garfo.disponivel = false;

                var aux2 = crialControlFilosofo(atual);


                painel3.Controls.Add(aux2);
                painel1.Controls.RemoveByKey(aux2.Name);

                garfoUtilizado(atual.anterior);
                garfoUtilizado(atual);
            }
        }