public void Run() { if (!FilaEntrada.Any() && NumberProcessed == NumeroConexoes) { RunConnectedActivities(); return; } else if (!FilaEntrada.Any() || NumberProcessed < NumeroConexoes) { return; } FilaEntrada = FilaEntrada.OrderBy(x => x.Inicio).ToList(); foreach (SItem item in FilaEntrada) { var tempo = CalcularTS(); var newItem = AddItemToFilaProcesso(new SItem { Nome = item.Nome, Inicio = item.Inicio }, tempo); Resultado.Add(newItem); sendToConnection(new SItem { Inicio = newItem.Fim, Nome = newItem.Nome }); } if (Print) { //PrintAtividadesEntrada(); PrintAtividadesResultado(); } RunConnectedActivities(); }
public void Run() { // Não roda caso o Nó seja uma "folha", ou seja, não tenha conexões if (!Connections.Any()) { if (Print) { PrintAtividadesEntrada(); } return; } // Ordena a fila de entrada pela ordem de entrada na atividade FilaEntrada = FilaEntrada.OrderBy(x => x.Inicio).ToList(); foreach (SItem item in FilaEntrada) { // Seleciona a próxima atividade (conexão) de acordo com um número aleatório gerado SConnection target = GetConnectionByProbability(rand.NextDouble()); // Pega o tempo de processamento desse item e atualiza o mesmo var tempoProc = target.CalcTS(); var newItem = ProcessItem(new SItem { Nome = item.Nome, Inicio = item.Inicio }, tempoProc); // Adiciona o item na lista de resultados Resultado.Add(newItem); // Adiciona o item na fila de entrada da próxima atividade target.Connection.FilaEntrada.Add(new SItem { Inicio = newItem.Fim, Nome = newItem.Nome }); } // Faz o Display das informações obtidas com a simulação da atividade if (Print) { PrintAtividadesResultado(); } // Processa as connexões RunConnectedActivities(); }