Eu estou criando um programa que desligue o computador na data e horario que o usuario desejar, meu programa já está funcionando corretamente, porém enquanto ele esta rodando ele, come 100% do processamento da máquina, coisa que não acontece com programas desse tipo. Eu preciso saber como fazer o comparativo da data e horario atual com a data e horario agendado pelo usuario sem ter esse problema no desempenho.
O trecho do código que preciso mudar está abaixo:
public void desligarPc(String data, String horario)
{
//hr é a variavel que esta armazenando a data e horario atual, da seguinta forma (##/##/#### - ##:##)
while (!hr.getText().equals(data + " - " + horario)){ Enquando isso for falso(por isso o !) ele continuar rodando
try {
Runtime.getRuntime().exec("rundll32.exe user.exe,ExitWindows");
Runtime.getRuntime().exec("shutdown -s -t 10"); //aqui eu realizo o desligamento
} catch (IOException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
}
}
}
Preciso tirar aquele while, sei que não é correto usa-lo, mesmo que funcione, preciso de uma solução que tenha melhor desempenho.
O que me parece (posso estar falando besteira) é que tu tá fazendo teu programa entrar num loop praticamente infinito, ele lê o horário do teu sistema o tempo inteiro… por isso esse consumo de processamento absurdo.
Dá uma olhada nos links acima, e principalmente, dá uma estudada em threads (não do fórum, Threads mesmo).
Qualquer dúvida, berra! Abraço!
wagner_a_lima
Acho que você deve procurar algo sobre threads.
Leonardo_Gloria
Concerteza, dah uma olhada na parte de Threads d java q eu acho q vai resolver seu problema!
8)
[]s!
R
rafegal
Então, eu sei que não devo usar while, apenas usei para testar e mostrar como quero q funcione.
Já tinham me falado que talvez desse certo usando Threads, porem meu professor disse que não havia necessidade, mas tabém não me ajudou com o problema :S
Mas vou seguir a dica de vocês e procurar sobre Threads.
Muito obrigado pela ajuda
ViniGodoy
Se seu horário não incluir os segundos, dê um sleep para verificar uma vez só a cada minuto (ou a cada 30 segundos, para garantir que o sleep sempre acordará dentro de um minuto):
Da forma que seu programa está hoje, ele verifica centenas de vezes por milisegundo se está ou não no horário, para que o computador seja desligado. Com o sleep, ele verificará apenas uma vez a cada minuto.
Outra coisa. Ao invés de fazer a comparação usando string, considere com carinho a possibilidade de usar um Calendar diretamente.
R
rafegal
Então cara, valeu mesmo pela dica, acho que agora funcionara corretamente.
E quanto a possibilidade de usar um Calendar, eu já tentei usa-lo mas não consegui, e de tanto quebra a cabeça vi o caminho das String mais fácil, testei e funcionou.
Mas agora funcionando, vou testar outra coisa pra melhorar o desempenho concerteza, vou estudar mais sobre Calendar pra não me perde de novo!