I have not read C # for a while, I am doing a simple code to perform simulations on demand and process data by applying FIFO. My problem is regarding the variable attributes of the Queue class, I debugged the program and noticed that when I run the generateMetrics () method the attributes are empty, with .Count = 0. Can anyone help me? Below my code.
class Fila
{
// Lista contendo tempos de espera na fila
public List<int> listaTempoEspera { get; set; }
// Lista tempo de processamento
public List<int> listaTempoProcessamento { get; set; }
// Lista demanda, intervalo entre chegada de novos itens a serem processados
public List<int> listaIntervaloDemanda { get; set; }
// Uma listagem com o tempo que o sistema ficou ocioso.
public List<int> listaTempoOcioso { get; set; }
// Métrica
public Metrica metrica { get; set; }
// Construtores
public Fila(List<int>listaProcessamento, List<int> listaDemanda)
{
this.listaIntervaloDemanda = listaDemanda;
this.listaTempoProcessamento = listaProcessamento;
this.listaTempoEspera = new List<int>();
this.listaTempoOcioso = new List<int>();
this.metrica = new Metrica();
}
public Fila()
{
this.listaIntervaloDemanda = new List<int>();
this.listaTempoProcessamento = new List<int>();
this.listaTempoEspera = new List<int>();
this.listaTempoOcioso = new List<int>();
this.metrica = new Metrica();
}
// Executar Simulação
public void ExecutarSimulacao(List<int> varExTempoProcessamento, List<int> varExTempoDemanda)
{
// Cria variáveis para execução dos métodos
// Inicia var da fila
List<int> filaExecucao = new List<int>();
// Tempo na fila
List<int> tempoNaFila = new List<int>();
// Variavel de Tempo
int tempoTotal = 0;
int tempoChegadaDemanda = 0;
// Variavel sinalizacao sistemaOcupado
bool sistemaOcupado = false;
// Var processamento
int processamentoAtual = 0;
// var TempoOcioso
int tempoOcioso = 0;
while (varExTempoProcessamento.Count > 0 || varExTempoDemanda.Count > 0 || filaExecucao.Count > 0)
{
// Incrementa o tempo a cada iteração
tempoTotal++;
tempoChegadaDemanda++;
// Faz o teste nova Demanda
bool novaDemanda = tempoChegadaDemanda == varExTempoDemanda[0];
if (novaDemanda)
{
// Remove da Lista
varExTempoDemanda.RemoveAt(0);
// Zera o tempoChegadaDemanda
tempoChegadaDemanda = 0;
// Verifica se o sistema esta executando algum pedido
if (sistemaOcupado == false)
{
// Atribue nova chegada diretamente ao processamento
processamentoAtual = varExTempoProcessamento[0];
// Deleta da fila
varExTempoProcessamento.RemoveAt(0);
// Muda o status do sistema par ocupado
sistemaOcupado = true;
//Adiciona 0(Zero) a lista tempo de espera
listaTempoEspera.Add(0);
}
else
{
// Caso o sistema estivesse ocioso, envia o dado para a lista.
if (tempoOcioso > 0)
{
listaTempoOcioso.Add(tempoOcioso);
tempoOcioso = 0;
}
// Adiciona a fila
filaExecucao.Add(varExTempoProcessamento[0]);
// Remove da lista de processamento
varExTempoProcessamento.RemoveAt(0);
// Cria nova posição na fila
tempoNaFila.Add(0);
}
} // Fim If Nova Demanda
// IF Sistema em Processamento
if (sistemaOcupado && processamentoAtual > 0)
{
processamentoAtual--;
}
else
{
// Verifica se há alguem na fila
if (filaExecucao.Count > 0)
{
// Atribue novo processamento diretamente da fila
processamentoAtual = filaExecucao[0];
// Deleta da fila
filaExecucao.RemoveAt(0);
// Adiciona o tempo de fila a lista TempoEspera
listaTempoEspera.Add(tempoNaFila[0]);
// Remove da Lista tempo da fila elemento já computado
tempoNaFila.RemoveAt(0);
// Não há mudança no status do sistema
// Adiciona tempo Não ocioso
listaTempoOcioso.Add(0);
}
else
{
sistemaOcupado = false;
}
} // Fim do IF Sistema em Processamento
// Tempo de fila
bool existeFila = filaExecucao.Count > 0;
if (existeFila)
{
for (int i = 0; i < filaExecucao.Count; i++)
{
tempoNaFila[i]++;
}
}
else
{
tempoOcioso++;
} // Fim tempo de fila
}
metrica.tempoTotal = tempoTotal;
} // Fim método ExecutarSimulacao
// Gerar Métricas
public Metrica GerarMetricas()
{
//Gera as metricas do tempo de espera
GerarMetricasTempoEspera();
//Gera as metricas do tempo de Intervalo entre demandas
GerarMetricasTempoDemanda();
//Gera as metricas do tempo Ocioso
GerarMetricasTempoOcioso();
//Gera as metricas do tempo de processamento
GerarMetricasTempoProcessamento();
return this.metrica;
} // Fim método GerarMetricas
public void GerarMetricasTempoEspera()
{
// Calcula a Média
int media = 0;
for (int i = 0; i < listaTempoEspera.Count; i++)
{
media += listaTempoEspera[i];
}
if (listaTempoEspera.Count != 0)
{
metrica.mediaEsperaFila = media / listaTempoEspera.Count;
}
// Calcula a Moda
var moda = listaTempoEspera.GroupBy(n => n).
OrderByDescending(g => g.Count()).
Select(g => g.Key).FirstOrDefault();
metrica.modaEsperaFila = moda;
}
public void GerarMetricasTempoProcessamento()
{
// Calcula a Média
int media = 0;
for (int i = 0; i < listaTempoProcessamento.Count; i++)
{
media += listaTempoProcessamento[i];
}
if (listaTempoProcessamento.Count !=0)
{
metrica.mediaProcessamento = media / listaTempoProcessamento.Count;
}
// Calcula a Moda
var moda = listaTempoProcessamento.GroupBy(n => n).
OrderByDescending(g => g.Count()).
Select(g => g.Key).FirstOrDefault();
metrica.modaProcessamento = moda;
}
public void GerarMetricasTempoDemanda()
{
// Calcula a Média
int media = 0;
for (int i = 0; i < listaIntervaloDemanda.Count; i++)
{
media += listaIntervaloDemanda[i];
}
if (listaIntervaloDemanda.Count !=0)
{
metrica.mediaDemanda = media / listaIntervaloDemanda.Count;
}
// Calcula a Moda
var moda = listaIntervaloDemanda.GroupBy(n => n).
OrderByDescending(g => g.Count()).
Select(g => g.Key).FirstOrDefault();
metrica.modaDemanda = moda;
}
public void GerarMetricasTempoOcioso()
{
// Calcula a Média
int media = 0;
for (int i = 0; i < listaTempoOcioso.Count; i++)
{
media += listaTempoOcioso[i];
}
if (listaTempoOcioso.Count != 0)
{
metrica.mediaOciosidade = media / listaTempoOcioso.Count;
}
// Calcula a Moda
var moda = listaTempoOcioso.GroupBy(n => n).
OrderByDescending(g => g.Count()).
Select(g => g.Key).FirstOrDefault();
metrica.modaOciosidade = moda;
}
// ---------------------------------------------------
public void ExecutarSimulacaoTarefa3(int numeroServidores, List<int> varExTempoProcessamento, List<int> varExTempoDemanda)
{
// Cria variáveis para execução dos métodos
// Inicia var da fila
List<int> filaExecucao = new List<int>();
// Tempo na fila
List<int> tempoNaFila = new List<int>();
// Variavel de Tempo
int tempoTotal = 0;
int tempoChegadaDemanda = 0;
// var TempoOcioso
int tempoOcioso = 0;
// Var Servidores
List<int> servidores = new List<int>();
List<bool> servidorOcupado = new List<bool>();
bool novaDemanda = false;
for (int i = 0; i < numeroServidores; i++)
{
servidores.Add(0);
servidorOcupado.Add(false);
}
while (varExTempoProcessamento.Count > 0 || varExTempoDemanda.Count > 0 || filaExecucao.Count > 0)
{
// Incrementa o tempo a cada iteração
tempoTotal++;
tempoChegadaDemanda++;
// Faz o teste nova Demanda
if (varExTempoDemanda.Count> 0)
{
novaDemanda = tempoChegadaDemanda == varExTempoDemanda[0];
}
else
{
novaDemanda = false;
}
//----
if (novaDemanda)
{
// Remove da Lista
varExTempoDemanda.RemoveAt(0);
// Zera o tempoChegadaDemanda
tempoChegadaDemanda = 0;
// Verifica se o sistema esta executando algum pedido
for (int i = 0; i < numeroServidores; i++)
{
if (servidorOcupado[i] == false)
{
// Atribue nova chegada diretamente ao processamento
servidores[i] = varExTempoProcessamento[0];
// Deleta da fila
varExTempoProcessamento.RemoveAt(0);
// Muda o status do sistema par ocupado
servidorOcupado[i] = true;
//Adiciona 0(Zero) a lista tempo de espera
listaTempoEspera.Add(0);
// Parar
break;
}
else if(i == numeroServidores-1)
{
// Caso o sistema estiver ocioso, envia o dado para a lista.
if (tempoOcioso > 0)
{
listaTempoOcioso.Add(tempoOcioso);
tempoOcioso = 0;
}
// Adiciona a fila
filaExecucao.Add(varExTempoProcessamento[0]);
// Remove da lista de processamento
varExTempoProcessamento.RemoveAt(0);
// Cria nova posição na fila
tempoNaFila.Add(0);
}
}
} // Fim If Nova Demanda
//// IF Sistema em Processamento
for (int i = 0; i < numeroServidores; i++)
{
// -----------------
if (servidorOcupado[i] && servidores[i] > 0)
{
servidores[i]--;
}
else
{
// Verifica se há alguem na fila
if (filaExecucao.Count > 0)
{
// Atribue novo processamento diretamente da fila
servidores[i] = filaExecucao[0];
// Deleta da fila
filaExecucao.RemoveAt(0);
// Adiciona o tempo de fila a lista TempoEspera
listaTempoEspera.Add(tempoNaFila[0]);
// Remove da Lista tempo da fila elemento já computado
tempoNaFila.RemoveAt(0);
// Não há mudança no status do sistema
// Adiciona tempo Não ocioso
listaTempoOcioso.Add(0);
}
else
{
servidorOcupado[i] = false;
}
}
} // Fim do IF Sistema em Processamento
// Tempo de fila
bool existeFila = filaExecucao.Count > 0;
if (existeFila)
{
for (int i = 0; i < filaExecucao.Count; i++)
{
tempoNaFila[i]++;
}
}
else
{
tempoOcioso++;
} // Fim tempo de fila
}
metrica.tempoTotal = tempoTotal;
} // Fim método ExecutarSimulacao
}// Fim Namespace Classe
}