private void Pessoa_ProdutorPilha(Pessoa pessoa) { if (!PilhaLivre.Any()) { Produtor.Enqueue(pessoa); return; } UsrFila fila = PilhaLivre.Dequeue(); if (fila == null) { return; } fila.SetaEstado(true); pessoa.Reinicia(); PilhaOcupada.Enqueue(fila); EventoConsumidor(); }
/// <summary> /// Inicializa quantidade de produtores,consumidores e fila /// </summary> private void Inicializa() { //inicializa produtores for (int i = 0; i < _qteProdutor; i++) { //cria produtor Pessoa pessoa = new Pessoa(_prodaleatorio ? GetRandom(_tpProdutor) : _tpProdutor); pessoa.ExecutaPilha += Pessoa_ProdutorPilha; LstProdutor.Add(pessoa); //define localização do produtor no painel pessoa.Location = new Point(width, height); PlProdutor.Controls.Add(pessoa); width += pessoa.Width; if (width >= 800) { width = 0; height += pessoa.Height; } } PlProdutor.Height = (height == 0 ? 92 : height + 92) + 10; height = 0; width = 0; //inicializa consumidores for (int i = 0; i < _qteConsumidor; i++) { //cria consumidor Pessoa pessoa = new Pessoa(_consaleatorio ? GetRandom(_tpConsumidor) : _tpConsumidor); pessoa.ExecutaPilha += Pessoa_ConsomePilha; LstConsumidor.Add(pessoa); //define localização do consumidor no painel pessoa.Location = new Point(width, height); PlConsumidor.Controls.Add(pessoa); width += pessoa.Width; if (width >= 800) { width = 0; height += pessoa.Height; } } PlConsumidor.Height = (height == 0 ? 92 : height + 92) + 10; height = 0; width = 0; for (int i = 0; i < _fila; i++) { //cria posição da fila UsrFila fila = new UsrFila(i); fila.SetaEstado(false); PilhaLivre.Enqueue(fila); LstFilas.Add(fila); //define posição da fila no painel fila.Location = new Point(width, height); PlFila.Controls.Add(fila); width += fila.Width; if (width >= 800) { width = 0; height += fila.Height; } } PlFila.Height = (height == 0 ? 92 : height + 92) + 10; }