|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
[JAVA] Sincronizzare un processo con l'orario attuale + intervallo
Ciao! Posto il codice per rendere l'idea di quello che voglio fare.
Codice:
final ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); service.scheduleWithFixedDelay(new Runnable(){ @Override public void run(){ esegui(); } }, 0, 1, TimeUnit.MINUTES); E questo non va bene, perché lo devo sincronizzare con un altra applicazione esterna (indipendente). ![]() Quindi ho bisogno di fissare un orario e da lì partire con un intervallo di 60 secondi... Come impostereste la cosa? Grazie! |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Se devi sincronizzare con un'applicazione esterna, fissare un orario di avvio è concettualmente sbagliato. Chi ti garantisce che l'altra applicazione partirà a quell'ora?
Devi trovare un modo per far comunicare i 2 processi. Di metodi ce ne sono tanti dal più barbino tipo file watcher sul secondo processo e scrittura file sul primo, ad uno qualunque dei vari metodi IPC: Pipe, RMI, JMS, Socket, Webservice SOAP/REST,... |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Il secondo argomento di scheduleWithFixedDelay rappresenta un delay iniziale. Calcola quante unità di tempo devi aspettare, nel tuo caso minuti, e passalo come valore.
Come ha detto tomminno se puoi trova un'altro modo per far comunicare i due programmi. Può sembrare semplice ma avere a che fare con il "tempo" è incredibilmente complicato. |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
no... nonononono no... no...
![]() ehmmm.... non ho modo di far comunicare le due applicazioni... voglio dire... no nonononono no... Mi rifiuto!!! Credetemi è un lavoraccio e ho già pochi capelli... Volete che li perda completamente?? Ma scusate non esiste, che ne so, un timer che all'x secondo, preciso e spaccato fa quello che deve fare indipendentemente da quando avvio il programma?? |
![]() |
![]() |
![]() |
#5 | |
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
Quote:
Ho un intervallo, 1 minuto per l'esattezza. Ma questo intervallo è calcolato da quando parte il programma. Quindi posso essere in anticipo o in ritardo a seconda dell'orario in cui avvio. |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Il secondo argomento che passi tu è 0, non 1
![]()
__________________
iMac 27" 5K |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Se poi hai il problema di non sapere quale sia l'orario giusto in cui far partire la tua applicazione rientriamo nel discorso di IPC. |
|
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
|
![]() |
![]() |
![]() |
#9 | |
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
Quote:
18:50:30 -> processa 18:51:30 -> processa 18:52:30 -> processa 18:53:30 -> processa 18:54:30 -> processa ...-> processa L'intervallo è sempre 1 minuto.. |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Ah quindi il problema era mantenere costante l'intervallo tra i vari eventi. In questo caso devi usare scheduleAtFixedRate al posto di scheduleWithFixedDelay.
|
![]() |
![]() |
![]() |
#11 | |
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
Quote:
Se non ti scoccia, puoi postarmi un esempio, per farmi capire meglio? |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Codice:
public class Test { private static void doStuff() { try { Thread.sleep(new Random().nextInt(3000)); } catch (InterruptedException ignored) { } } public static void main(String... args) { ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); executor.scheduleAtFixedRate(() -> { System.out.println(LocalTime.now()); doStuff(); }, 0, 5, TimeUnit.SECONDS); } } |
![]() |
![]() |
![]() |
#13 | |
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
Quote:
Direi che ci siamo, ma se io volessi far partire il delay ad un preciso secondo? Questo è quello che sto in realtà, cercando di fare. Tra l'altro ho notato una cosa strana, per niente familiare nel tuo codice... Cosa sta ad indicare questo segno ->?? Mai visto! ![]() Grazie! |
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
Lambda expression. È una roba che hanno introdotto in java 8. |
|
![]() |
![]() |
![]() |
#15 | |
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
Quote:
Stabilisco, per esempio, che a, XX:XX:30, esegue... Quindi mi aspetto che al secondo minuto sempre a 30 secondi processi. Intendo orario preciso. Ho provato ad inserire il secondo parametro, ma il problema è che attende tanto quanto il secondo parametro è impostato, ma non tiene conto dell'orario che deve processare. Poi magari ho sbagliato io ma credo che manchi qualcosa. |
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
|
![]() |
![]() |
![]() |
#17 |
Member
Iscritto dal: Jun 2013
Messaggi: 133
|
Ok, ma perdona se insisto, io non so a che secondo il programma viene attivato. Quindi dovrei fare in modo che se mancano X secondi al secondo stabilito inizia a conteggiare l'intervallo di 1 minuto in modo tale che al minuto successivo al secondo spaccato processa. Questo è il mio problema, non è tanto l intervallo di tempo, ma far partire e sincronizzare il processo.
|
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Quote:
![]() Cya!
__________________
iMac 27" 5K |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:48.