Dúvida com a aplicação do while(true) [RESOLVIDO]

7 respostas
vanessa.tenorio

Boa tarde, pessoal!
Então, eu crei um código bem simples que está executando com sucesso, porém minha dúvida é: eu estou utilizando a estrutura de repetição while(true) e eu colocar meu aplicativo em execução por mais de 5 horas sem interrupção, por exemplo, é possível que gere algum dano ao processador ou qualquer outro tipo de problema?

public classe teste {
    public static void main(String[] args){
        int count = 1; 
        while (true) {
             GregorianCalendar d = new GregorianCalendar();
            minutos = d.get(Calendar.MINUTE);
            System.out.println("Minutos " + minutos);

            horas = d.get(Calendar.HOUR_OF_DAY);
            System.out.println("Horas " + horas);
            System.out.println("Contador é: " + count); 
            count++; 
        } 
    } 
}

Obs: meu código possui dentro da estrutura de repetição algumas outras funcionalidades.
Grata!!!

7 Respostas

E

Se sua aplicação entrou em loop (o nome técnico que se dá para uma aplicação que não sai sozinha de um laço e precisa ser interrompida), ela pode estar usando até 100% de um núcleo do processador (depende, é claro, do que ela estiver fazendo).
Isso implica em aquecimento, mas se seu computador estiver corretamente ventilado não deve provocar nenhum problema do tipo “queimar o computador”.

GusMcCart

Só uma pergunta, qual o objetivo do código? As vezes alguém aparece com uma implementação melhor ou com alguma idéia para melhorar isso…

E

Ela quer mostrar continuamente o horário corrente.

Dona Vanessa, o código abaixo, em vez de gastar 100% de CPU (que é o seu caso) gasta bem menos e não deve ficar rolando a tela feito doido, como é o que ocorre. Tente rodar o código abaixo (observação: o resultado dentro do Eclipse ou do NetBeans é uma tela rolando, mas no console do Windows ou do Linux ele mostra só uma linha que fica sendo atualizada continuamente. São coisas do caracter “\r” …

import java.util.Calendar;

public class TesteRelogio {  
   public static void main(String[] args){  
       int count = 1;   
       while (true) {  
           Calendar d = Calendar.getInstance();
           System.out.printf ("%02d:%02d:%02d - Contador = %5d\r",
               d.get (Calendar.HOUR_OF_DAY), 
               d.get (Calendar.MINUTE), 
               d.get (Calendar.SECOND),
               count);
           count++;
           // A linha abaixo espera meio segundo. 
           try { Thread.sleep (500); } catch (InterruptedException ex) { }
       }   
   }
}
vanessa.tenorio

Muito obrigada pelas informações, entanglement e GusMcCart !!!
Então, a princípio o objetivo do código é estar apresentando em um jFrame a data atual, além das horas, e também apresentará neste mesmo jFrame, valores que estão sendo inseridos em um banco de dados, no momento da inserção do mesmo.

Grata!

E

Ah, mas neste caso (botar um reloginho em um JFrame) você precisa de um Timer, não de um loop infinito (que vai simplesmente travar a tela).

vanessa.tenorio
entanglement:
Ela quer mostrar continuamente o horário corrente.

Dona Vanessa, o código abaixo, em vez de gastar 100% de CPU (que é o seu caso) gasta bem menos e não deve ficar rolando a tela feito doido, como é o que ocorre. Tente rodar o código abaixo (observação: o resultado dentro do Eclipse ou do NetBeans é uma tela rolando, mas no console do Windows ou do Linux ele mostra só uma linha que fica sendo atualizada continuamente. São coisas do caracter "\r" ...

import java.util.Calendar;

public class TesteRelogio {  
   public static void main(String[] args){  
       int count = 1;   
       while (true) {  
           Calendar d = Calendar.getInstance();
           System.out.printf ("%02d:%02d:%02d - Contador = %5d\r",
               d.get (Calendar.HOUR_OF_DAY), 
               d.get (Calendar.MINUTE), 
               d.get (Calendar.SECOND),
               count);
           count++;
           // A linha abaixo espera meio segundo. 
           try { Thread.sleep (500); } catch (InterruptedException ex) { }
       }   
   }
}
Entanglement, 100% do meu problema solucionado!!! Era exatamente o gasto exagerado da CPU que eu temia, mas notei que aplicando a linha de espera de meio segundo que voce indicou, o meu projeto realizou a mesma funcionalidade, porém consumindo bem menos. :D

Muitíssimo Obrigada, GusMcCart e Entanglement!!!

GusMcCart

Por isso perguntei o motivo do código entanglement… Vi que é pra pegar a data e hora atual, mas desse jeito que ela fez se jogar num JFrame…

Criado 8 de agosto de 2012
Ultima resposta 8 de ago. de 2012
Respostas 7
Participantes 3