Como programar o TTimer efetuar uma rotina em tal hora?

Delphi

11/04/2008

Colegas
Como posso programar o TTimer para disparar uma rotina em tal hora.
Estou propondo o desligamento do sistema que inicia as 07:00 para desligar as 16:45 m , acredito que haja uma fórmula para se chegar ao milésimos de segundos que o TTime precisa para disparar.

Qualquer ajuda será bem vinda.

Hélio


Helio Nascimento

Helio Nascimento

Curtidas 0

Respostas

Edilcimar

Edilcimar

11/04/2008

existe a função para pegar a hora atual, coloque-a em uma variável ttime, coloque o timer o qual cada segundo vale mil, a cada X segundos incremente a variável, verifique se a mesma coincide com o horário desejado, caso positivo, dispare o evento desejado


GOSTEI 0
Paullsoftware

Paullsoftware

11/04/2008

Se entendi bem a sua dúvida, você não poderia ficar testando a hora usando um if simples não?
if horatual = horadesejada then
 begin
  //execute procedimentos
 end;

espero ter ajudado :wink:


GOSTEI 0
Marco Salles

Marco Salles

11/04/2008

se entendi sua duvida tecnicamente é mais correto , criar um serviço e
usar TTheads para o processamento


GOSTEI 0
Helio Nascimento

Helio Nascimento

11/04/2008

Marco Salles - Obrigado pela participação mas, o seu colega aqui não sabe desenvolver uma TTheads! Nunca tentei, por não necessitar e correr atrás.
Não tenho idéia de como desenvolver!!. Desculpe-me, mas é isso..!

paullsoftware / Sua Idéia não pensei. Vou testá-la.

Edilcimar /Obrigado também por participar. Vou tentar.


GOSTEI 0
Rodc

Rodc

11/04/2008

Se você testar a hora a cada segundo, você estará consumindo processamento desnecessário da máquina. O que você precisa é calcular quantos milisegundos faltam para o seu evento ocorrer.
var
dataFutura: TTime;
begin
    dataFutura := StrToTime("16:45");
    Timer1.Interval := MilliSecondsBetween(Time(), dataFutura);
    Timer1.Enabled := true;
end;



GOSTEI 0
Nerdex

Nerdex

11/04/2008

Olá,

Uma alternativa plausível, sofisticada e mais profissional é ´passar´ esta tarefa para o Sist. Operacional, utilizando o agendamento de tarefas do Windows conforme este exemplo:

WinExec(´schtasks /CREATE /TN NOMEdaTAREFA /TR C:\Windows\System32\Calc.exe /RU "NT AUTHORITY\SYSTEM" /SC diariamente /ST 16:00:00´,SW_HIDE);


Pesquise outros parâmetros que podem ser passados.


GOSTEI 0
Helio Nascimento

Helio Nascimento

11/04/2008

Obrigado a todos. São variáveis de soluções interessantes!

Muito Obrigado pela atenção aos colegas que me responderam.


GOSTEI 0
POSTAR