Assicurarsi che l'evento pianificato venga eseguito solo una volta al giorno?

1

In un mio progetto di hobby, una "casa intelligente" per il controllo delle luci, sto progettando di creare una funzione che spenga tutte le luci in un determinato momento della giornata. Ci sono anche molte altre funzionalità che vengono eseguite su comando.

Ho creato una serie di eventi che vengono controllati su un intervallo di (n) secondi. Il programma esegue semplicemente iterazioni su ogni evento nello stack, chiede loro di valutare se devono essere eseguiti e quindi continua.

Per gli eventi "on command", semplicemente scarto l'evento fuori dallo stack dopo che sono stati eseguiti.

Tuttavia, per la mia funzione pianificata ho bisogno che l'evento si valuti, venga eseguito se l'ora del giorno è corretta, e poi torna nello stack - senza sparare nuovamente alla successiva iterazione.

I miei problemi sono che non posso dire all'evento di funzionare esattamente alle 12:00:00, poiché l'intervallo per il controllo degli eventi non è esatto (questo potrebbe indicare altri problemi nella mia logica?). Né posso usare una bandiera per indicare che l'evento è stato eseguito, poiché è previsto che venga eseguito nuovamente il giorno successivo (in 24 ore).

Per dare un contesto: l'idea alla base dello stack di eventi è quella di fornire una coda per i comandi in arrivo che arrivano attraverso un servizio REST (con più utenti).

Aggiornamento : una possibile soluzione potrebbe essere semplicemente quella di riprogrammare l'attività dopo che è stata completata. Comunque sto lasciando la domanda aperta un po 'più a lungo nel caso qualcuno abbia una soluzione alternativa.

    
posta KG Christensen 15.10.2014 - 23:49
fonte

2 risposte

1

Quindi, se hai problemi a farlo funzionare in un momento esatto, dagli un intervallo di tempo, ad esempio dalle 12:00:00 - > 12:05:00 e una volta che viene eseguito in quel periodo, imposta una bandiera. Quindi, in un altro periodo, ad esempio, dalle 12:05:00 - > 12:10:00 controlla la bandiera e cancellala in modo che tu possa eseguirla di nuovo tra 24 ore. puoi modificare questi periodi o spostarli per farli funzionare in base alle tue esigenze temporali (forse renderli ore invece di 5 minuti)

    
risposta data 16.10.2014 - 05:00
fonte
-1

Perché non usi solo Timer.scheduleAtFixedRate (attività TimerTask, Date firstTime, long period)

Se imposti firstTime su currenttime arrotondato al minuto successivo, il timer verrà eseguito alle 12:00 se imposti il periodo su 60000

    
risposta data 16.10.2014 - 07:59
fonte

Leggi altre domande sui tag