Jump to content

Recommended Posts

Posted

Bom Dia,

Estou com seguinte problema: tenho um sistema de agendamento, em que de x em x tempo faz um determinada ação. o meu problema é quando o sistema é desligado como calcular a próxima hora de execução quando o sistema é iniciado. Alguém me pode ajudar?

obrigado

Posted

Não estou a ver ao certo como estás a fazer, mas podes usar as funções de Data/Hora para esse tipo de cálculos.

Date: Mostra-te a data actual

IncHour: Adiciona uma hora à data que lhe indicares.

Assim, para adicionares uma hora por exemplo à data actual, fazes:

var
  ProximaHora:TDateTime;
begin
  ProximaHora:=IncHour(Date,1);
.
.

A variável ProximaHora irá ter o momento de execução.

Agora, como é que estás a controlar o inicio da operação?

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Posted

Obrigada pela ajuda.

Eu guardo a hora de inicio de execução, hora de execução (estas duas sao iguais aquando a inserção) e ultima hora que foi executada, tenho um timer que verifica a minha agenda e vê se a hora de execucao e igual a actual.

Mas por exemplo, o pc é desligado as 22h e é ligado às 6h, durantes este intervalo deveriam ter sido executadas ações, que podem ser de 2 em 2horas, 3 em 3h, ..... ao iniciar a app quero actualizar a hora de execução, para continuar o "ciclo normal" como devo fazer a comparação das horas de modo a calcular a hora correta?

Posted

Porque não fazes o seguinte:

- No arranque da App, as tais acções são executadas (ignora-se aqui o agendamento).

- Depois de executar, marca a próxima hora de execução com o método que te disse (IncHour(Date,2) por exemplo)

- A partir daí, começa o teste. Sempre que, ao testar, a hora actual for >= à hora marcada da proxima execução, volta ao primeiro ponto, executando as acções e voltando a actualizar a variável da próxima hora.

Serve para o que precisas?

Uma alternativa é usar um TTimer, que te permite executar código de x em x milisegundos.

Possivelmente é mais simples de usar, mas depende de que compilador estás a usar. FreePascal?

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.