Jump to content
Ana789

Calcular hora seguinte

Recommended Posts

Ana789

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

Share this post


Link to post
Share on other sites
nunopicado

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.

Share this post


Link to post
Share on other sites
Ana789

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?

Share this post


Link to post
Share on other sites
nunopicado

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.

Share this post


Link to post
Share on other sites

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.