Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-07-2015, 13:33   #1
JohnMarston
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);
Il metodo esegui(), ad ogni minuto viene processato partendo dall'orario in cui è lanciato il programma.
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!
JohnMarston è offline   Rispondi citando il messaggio o parte di esso
Old 29-07-2015, 14:10   #2
tomminno
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,...
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 29-07-2015, 14:46   #3
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
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.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 29-07-2015, 15:19   #4
JohnMarston
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??
JohnMarston è offline   Rispondi citando il messaggio o parte di esso
Old 29-07-2015, 15:25   #5
JohnMarston
Member
 
Iscritto dal: Jun 2013
Messaggi: 133
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
Il secondo argomento di scheduleWithFixedDelay rappresenta un delay iniziale. Calcola quante unità di tempo devi aspettare, nel tuo caso minuti, e passalo come valore.
Scusa eh, ma il codice sopra non fa già quello che hai detto?
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.
JohnMarston è offline   Rispondi citando il messaggio o parte di esso
Old 29-07-2015, 15:46   #6
Don[ITA]
Senior Member
 
L'Avatar di Don[ITA]
 
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
Il secondo argomento che passi tu è 0, non 1
__________________
iMac 27" 5K
Don[ITA] è offline   Rispondi citando il messaggio o parte di esso
Old 29-07-2015, 16:45   #7
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da JohnMarston Guarda i messaggi
Scusa eh, ma il codice sopra non fa già quello che hai detto?
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.
Scusa ma non ho capito il tuo problema. Te vuoi ad esempio avviare la tua applicazione alle 11:00? Usa lo scheduler del sistema operativo per farlo.

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.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 29-07-2015, 17:48   #8
JohnMarston
Member
 
Iscritto dal: Jun 2013
Messaggi: 133
Quote:
Originariamente inviato da Don[ITA] Guarda i messaggi
Il secondo argomento che passi tu è 0, non 1
certo perché al primo avvio mi aspetto che processi, poi passa il minuto e processa nuovamente.. Da quel momento in poi lavora ad ogni intervallo impostato...
JohnMarston è offline   Rispondi citando il messaggio o parte di esso
Old 29-07-2015, 17:53   #9
JohnMarston
Member
 
Iscritto dal: Jun 2013
Messaggi: 133
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Scusa ma non ho capito il tuo problema. Te vuoi ad esempio avviare la tua applicazione alle 11:00?
Facciamo che ad un X secondo preciso processa. Per esempio, tengo conto 30:
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..
JohnMarston è offline   Rispondi citando il messaggio o parte di esso
Old 29-07-2015, 22:28   #10
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
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.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 30-07-2015, 08:18   #11
JohnMarston
Member
 
Iscritto dal: Jun 2013
Messaggi: 133
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
Ah quindi il problema era mantenere costante l'intervallo tra i vari eventi. In questo caso devi usare scheduleAtFixedRate al posto di scheduleWithFixedDelay.
Quindi a tuo dire, con scheduleAtFixedRate, indipendentemente dall'orario in cui lancio il programma, il processo viene eseguito a preciso X secondo con intervallo di 1 minuto?

Se non ti scoccia, puoi postarmi un esempio, per farmi capire meglio?
JohnMarston è offline   Rispondi citando il messaggio o parte di esso
Old 30-07-2015, 11:48   #12
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
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);
    }
}
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 31-07-2015, 07:46   #13
JohnMarston
Member
 
Iscritto dal: Jun 2013
Messaggi: 133
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
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);
    }
}
Quindi scheduleWithFixedDelay avvia il processo con il delay da quando termina il precedente, mentre scheduleAtFixedRate ogni X secondi tra un'esecuzione e l'altra non tenendo conto del tempo impiegato nel processare quello precedente.

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!
JohnMarston è offline   Rispondi citando il messaggio o parte di esso
Old 31-07-2015, 08:53   #14
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da JohnMarston Guarda i messaggi
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.
Devi usare il secondo parametro come ti ho detto nel primo messaggio per ritardare la prima esecuzione del numero di secondi necessari.


Quote:
Originariamente inviato da JohnMarston Guarda i messaggi
Tra l'altro ho notato una cosa strana, per niente familiare nel tuo codice...
Cosa sta ad indicare questo segno ->?? Mai visto!
Lambda expression. È una roba che hanno introdotto in java 8.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 31-07-2015, 10:56   #15
JohnMarston
Member
 
Iscritto dal: Jun 2013
Messaggi: 133
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
Devi usare il secondo parametro come ti ho detto nel primo messaggio per ritardare la prima esecuzione del numero di secondi necessari.
Ma scusa eh, ma io non devo attendere X secondi, ma far partire il processo a X secondo preciso e spaccato.

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.
JohnMarston è offline   Rispondi citando il messaggio o parte di esso
Old 31-07-2015, 11:54   #16
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da JohnMarston Guarda i messaggi
Ma scusa eh, ma io non devo attendere X secondi, ma far partire il processo a X secondo preciso e spaccato.
Se sono le XX:XX:12 e gli dici di aspettare 18 secondi prima di far partire il tutto poi parte alle XX:XX:30.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 31-07-2015, 14:50   #17
JohnMarston
Member
 
Iscritto dal: Jun 2013
Messaggi: 133
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
Se sono le XX:XX:12 e gli dici di aspettare 18 secondi prima di far partire il tutto poi parte alle XX:XX:30.
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.
JohnMarston è offline   Rispondi citando il messaggio o parte di esso
Old 31-07-2015, 15:54   #18
Don[ITA]
Senior Member
 
L'Avatar di Don[ITA]
 
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
Quote:
Originariamente inviato da JohnMarston Guarda i messaggi
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.
Per saperlo basta semplicemente allocare un oggetto di tipoDate utilizzando il costruttore base.

Cya!
__________________
iMac 27" 5K
Don[ITA] è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
GeForce RTX 6000: design a chiplet e arr...
Questi oggetti non dovrebbero esistere, ...
Un ESP32, un modulo ECG e un bottone cuc...
Grazie a un lancio preciso, il Nancy Gra...
Centrali elettriche libere di inquinare:...
Un razzo spaziale Vega C dell'italiana A...
Mozilla: i modelli IA aperti sono solo 4...
Intel e SK hynix al tavolo per un'allean...
Osservare la Luna con la NASA, anche in ...
Wallbox per auto elettriche su Amazon: d...
Il mistero della stagione degli uragani ...
La Corte di Cassazione affida i ricorsi ...
Tutti i nuovi prodotti Apple prenotabili...
DDR5, un kit da 598 a 1.215 euro in un m...
Portatile ASUS Vivobook 14 a 837,95€: AM...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:53.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v