public void geracao2T() { //DETERMINANDO OS VALORES DE INCIO E FIM DO CONTADOR(j) inicioJ = 1; fimJ = tam + 1; //INICIANDO MATRIZ GERACAOF COM '0' iniciandoMatriz(); //CRIA UM OBJETO DO TIPO GOL(Sigla de Game Of Life) Gol jogoG = new Gol(); //RODA AS GERAÇÕES for (int i = 0; i < qtd; i++) { //ADICIONA OS VALORES PARA AS VARIÁVEIS jogoG.GeracaoI = geracaoI; jogoG.GeracaoF = geracaoF; //DETERMINANDO OS VALORES DE INICIO E FIM DO CONTADOR(i) jogoG.InicioI = 1; jogoG.FimI = (tam + 2) / 2; //CRIANDO AS THREADS Thread mythread = new Thread(jogoG.estadoCel); Thread mythread2 = new Thread(jogoG.estadoCel); time.Start();// Começa a contar o tempo //Iniciando a primeira Thread mythread.Start(); mythread.Join(); //Fazendo mudanças nas variáveis para começar a segunda jogoG.InicioI = fimI; jogoG.FimI = tam + 1; //Iniciando a segunda Thread mythread2.Start(); mythread2.Join(); //Espera todas as threads terminarem Task.WaitAll(); time.Stop();// Para de contar o tempo //FAZENDO A TROCA DE VALORES for (int k = 0; k < geracaoI.Count; k++) { for (int j = 0; j < geracaoI[0].Count; j++) { geracaoF[k][j] = jogoG.GeracaoF[k][j]; geracaoI[k][j] = geracaoF[k][j]; } } } }
public void geracao4T() { //INICIANDO MATRIZ GERACAOF COM '0' iniciandoMatriz(); Gol jogoG = new Gol(); //RODA AS GERAÇÕES for (int i = 0; i < qtd; i++) { //ADICIONA OS VALORES PARA AS VARIÁVEIS jogoG.GeracaoI = geracaoI; jogoG.GeracaoF = geracaoF; //DETERMINANDO OS VALORES DE INICIO E FIM DO CONTADOR(i) jogoG.InicioI = 1; jogoG.FimI = (tam + 2) / 2; //DETERMINANDO OS VALORES DE INICIO E FIM DO CONTADOR(j) jogoG.InicioJ = 1; jogoG.FimJ = (tam + 2) / 2; //CRIANDO AS THREADS Thread mythread = new Thread(jogoG.estadoCel); Thread mythread2 = new Thread(jogoG.estadoCel); Thread mythread3 = new Thread(jogoG.estadoCel); Thread mythread4 = new Thread(jogoG.estadoCel); time.Start();// Começa a contar o tempo //Iniciando a primeira Thread mythread.Start(); mythread.Join(); //Mudando as variaveis do contador (j) jogoG.InicioJ = jogoG.FimJ; jogoG.FimJ = tam + 1; //Iniciando a segunda Thread mythread2.Start(); mythread2.Join(); //Mudando as variaveis do contador (i) jogoG.InicioI = jogoG.FimI; jogoG.FimI = tam + 1; //Mudando as variaveis do contador (j) jogoG.InicioJ = 1; jogoG.FimJ = (tam + 2) / 2; //Iniciando a terceira Thread mythread3.Start(); mythread3.Join(); //Mudando as variaveis do contador (j) jogoG.InicioJ = jogoG.FimJ; jogoG.FimJ = tam + 1; //Iniciando a quarta Thread mythread4.Start(); mythread4.Join(); //Espera todas as threads terminarem Task.WaitAll(); time.Stop();// Para de contar o tempo //FAZENDO A TROCA DE VALORES for (int k = 0; k < geracaoI.Count; k++) { for (int j = 0; j < geracaoI[0].Count; j++) { geracaoF[k][j] = jogoG.GeracaoF[k][j]; geracaoI[k][j] = geracaoF[k][j]; } } } }
private void OpenFile(object sender, MouseButtonEventArgs e) { Stopwatch time = new Stopwatch(); if (caixaDir.GetLineText(0) != "" && caixaQtd.GetLineText(0) != "") { int qtd = Convert.ToInt32(caixaQtd.GetLineText(0)); //VERIFICA SE O ARQUIVO EXISTE if (System.IO.File.Exists(caixaDir.GetLineText(0))) { List <List <char> > matriz = new List <List <char> >(); List <char> borda = new List <char>(); string linhaArq = ""; int tam; int numLinha = 0; //LENDO O ARQUIVO E PASSANDO OS VALORES PARA A MATRIZ using (StreamReader arq = new StreamReader(caixaDir.GetLineText(0))) {//using não precisa fechar o arquivo linhaArq = arq.ReadLine(); tam = Convert.ToInt32(linhaArq); if (tam < 1001) { //preenchendo as bordas com '0' for (int i = 0; i < tam + 2; i++) { borda.Add('0'); } //preenchendo a matriz com os valores while (numLinha < tam) { List <char> linha = new List <char>(); linhaArq = arq.ReadLine(); if (numLinha == 0) { //Adiciona a borda da primeira linha na matriz matriz.Add(borda); } try { for (int i = 0; i < tam; i++) { if (i == 0) { //Adiciona borda na primeira coluna da matriz linha.Add('0'); } linha.Add(linhaArq[i]); if ((i + 1) == tam) { //Adiciona borda na última coluna da matriz linha.Add('0'); } } //Adiciona linha na matriz matriz.Add(linha); numLinha++; if (numLinha == tam) { //Adiciona a borda da última linha na matriz matriz.Add(borda); } } catch (NullReferenceException nullRefEx) { Console.WriteLine("Error: " + nullRefEx); } } } } if (tam < 1001) { if (caixaThre.GetLineText(0) == "2" || caixaThre.GetLineText(0) == "4" || caixaThre.GetLineText(0) == "0") { //CRIA UM OBJETO DO TIPO GOL(Game Of Life) e faz a atribuição de valores para as variáveis Gol jogoG = new Gol(); jogoG.GeracaoI = matriz; jogoG.Qtd = qtd; jogoG.Tam = tam; if (caixaThre.GetLineText(0) == "2") { //Inicia a geração com duas threads jogoG.geracao2T(); } else { if (caixaThre.GetLineText(0) == "4") { //Inicia a geração com quatro threads jogoG.geracao4T(); } else { if (caixaThre.GetLineText(0) == "0") { //Inicia a geração de forma sequêncial jogoG.geracao(); } } } // Obtém o tempo que a rotina demorou a executar TimeSpan tempo = jogoG.time.Elapsed; tempoExec.Text = tempo.ToString("hh':'mm':'ss':'fff"); //RESULTADO - Cria arquivo com geração final jogoG.result(jogoG.GeracaoI); visualizar();//Abre a canvas de resultado } else { MessageBoxResult alerta = MessageBox.Show("Erro na quantidade de Threads!\nSó é possível 0, 2 ou 4 threads.", "Alerta", MessageBoxButton.OK, MessageBoxImage.Warning); } } else { MessageBoxResult alerta = MessageBox.Show("Tamanho da matriz ultrapassado!\nO valor máximo é de 1000.", "Alerta", MessageBoxButton.OK, MessageBoxImage.Warning); } } else { MessageBoxResult alerta = MessageBox.Show("Arquivo não encontrado!\nVerifique se o mesmo está localizado na pasta bin\\Debug do projeto.", "Alerta", MessageBoxButton.OK, MessageBoxImage.Error); } } else { if (caixaDir.GetLineText(0) == "" && caixaQtd.GetLineText(0) == "") { MessageBoxResult alerta = MessageBox.Show("Digite o nome do arquivo e a quantidade de gerações.", "Erro", MessageBoxButton.OK, MessageBoxImage.Error); } else { if (caixaDir.GetLineText(0) == "") { MessageBoxResult alerta = MessageBox.Show("Digite o nome do arquivo.", "Erro", MessageBoxButton.OK, MessageBoxImage.Error); } else { MessageBoxResult alerta = MessageBox.Show("Digite a quantidade de gerações.", "Erro", MessageBoxButton.OK, MessageBoxImage.Error); } } } }