Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere)
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere)
Quattro modi di indossarlo, stessa app del Plaud Note Pro e integrazione con il desktop. Il registratore IA da indossare di Plaud eccelle in mobilità, ma resta vincolato all'abbonamento ed è facile da perdere
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Xiaomi ha portato Redmi Watch 6 anche sul mercato italiano, puntando su un display AMOLED da 2,07 pollici con picco di luminosità a 2000 nit, frame in alluminio da 9,9mm e un'autonomia dichiarata di 12 giorni. Lo smartwatch gira su HyperOS 3 e integra GPS, Bluetooth 5.4 e oltre 150 sport mode. Il tutto a meno di 100 euro
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Con 22 tasti, il pulsante 5D, lo Shift Mode e il sensore PixArt 3395 da 26.000 DPI, il nuovo mouse wireless di Mad Catz si rivolge in modo preciso ai giocatori di MMO e RPG. Ma chi conosce già il R.A.T. 8+ ADV si accorgerà subito di quanto i due prodotti condividano, e di dove invece divergono
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


Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro Redmi Watch 6 in prova: lo smartwatch con ampio ...
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ...
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC Radeon RX 9070 GRE, AMD la porta in tutto il mon...
Reolink OMVI 3i WiFi: videosorveglianza più intelligente e facile da usare Reolink OMVI 3i WiFi: videosorveglianza pi&ugrav...
Virtua Fighter è tornato e non &e...
Il ritorno di Fumito Ueda, autore di Sha...
Cooler Master svela GPU Shield, la nuova...
Samsung Galaxy S27 Pro: sarà lui ...
Così Google ha ottimizzato Chrome...
Xiaomi non cambia idea: il display poste...
LG presenta in Italia le gamme TV Micro ...
Sette anni dopo l'annuncio, The Wolf Amo...
'Non avrete aumenti': la decisione shock...
TIM lancia il Pass Mondiali DAZN: 104 pa...
Tesla Roadster, promessa o miraggio? La ...
Mark Hamilton, la tavola periodica del m...
Hanger 13 annuncia Uomo d'Onore: espansi...
La battaglia delle HBM4 entra nel vivo: ...
Dopo 12 anni torna Alien: Isolation. Ecc...
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: 19:14.


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