Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479

    Piu timer nello stesso programma

    Ciao a tutti!!!
    stavo appunto pensando a come poter realizzare piu timer nello stesso programma.
    A me servirebbe tenere tanti timer ( ad esempio in una lista ) e che ogniuno di esso mi "notifichi" quando e' scaduto in modo che io possa eseguire delle operazioni, potreste darmi qualche suggerimento? :-)

    grazie mille!!!
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Piu timer nello stesso programma

    Originariamente inviato da Poker1
    stavo appunto pensando a come poter realizzare piu timer nello stesso programma.
    A me servirebbe tenere tanti timer ( ad esempio in una lista ) e che ogniuno di esso mi "notifichi" quando e' scaduto in modo che io possa eseguire delle operazioni, potreste darmi qualche suggerimento? :-)
    Dipende da quali sono queste operazioni che devi fare. Se devi fare operazioni su una interfaccia utente Swing, conviene usare la classe Timer del package javax.swing (perché la notifica è basata su un ActionListener e quindi invocata nel contesto del EDT).
    Se invece devi fare qualunque altra cosa, allora puoi usare le classi Timer/TimerTask del package java.util.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    praticamente quello che devo fare e' mettere degli indirizzi IP:Porta in questa lista e associare ad ognuno di essi un timer ( diverso ). Ogni volta che uno di questi timer scade devo inviare a quell'indirizzo un pacchetto UDP.
    Quindi il TimerTask e' quello che deve essere eseguito alla scadenza del timer ?

    Un alta cosa, visto che e' un Task, potrei sottomettere questi task ad un thread pool? Io avevo pensato di attivare un thread ( fisso ) che attende che uno di questi timer scatti ed al suo interno attivare un pool per sottomettere i task.
    Il thread fisso perche' dopo che un timer scade, parte nuovamente.
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Poker1
    praticamente quello che devo fare e' mettere degli indirizzi IP:Porta in questa lista e associare ad ognuno di essi un timer ( diverso ). Ogni volta che uno di questi timer scade devo inviare a quell'indirizzo un pacchetto UDP.
    Quindi il TimerTask e' quello che deve essere eseguito alla scadenza del timer ?
    Esatto. E visto che in ogni caso devi estendere TimerTask, allora puoi fare in modo che ogni oggetto TuoTimerTask contenga IP+porta che ti serve. Quando il run() verrà invocato, farai quello che devi fare con questi dati.

    Originariamente inviato da Poker1
    Un alta cosa, visto che e' un Task, potrei sottomettere questi task ad un thread pool? Io avevo pensato di attivare un thread ( fisso ) che attende che uno di questi timer scatti ed al suo interno attivare un pool per sottomettere i task.
    Il thread fisso perche' dopo che un timer scade, parte nuovamente.
    La questione è questa. Un timer task deve essere eseguito il più velocemente possibile, altrimenti "mangia" il tempo alla gestione del timer.
    Un thread-pool accetta dei Runnable. TimerTask in effetti è-un Runnable ma non andrebbe bene passare un TimerTask al thread-pool, visto che già il run() di TimerTask è quello che viene eseguito dal Timer.
    Quando il run() del tuo task viene invocato, potresti creare un oggetto che implementa Runnable e passarlo al thread-pool e sarà poi quest'ultimo Runnable a fare il "lavoro".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    Ok ho capito, ora inizio a scrivere qualcosa e ti faccio sapere cosa esce fuori :-))
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  6. #6
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    Allora ho fatto cosi':
    ho creato un Vector contenente oggetti del tipo IP:Porta ( piu altre informazioni che mi servono ) e Timer.
    Quindi, ad ogni timer del vector ho associato un MioTimerTask il quale deve fare un meccanismo di ping-pong.
    Se il timer viene rallentato non e' una grande perdita per me in quanto non deve essere preciso al millesimo, visto che utilizzo UDP e il pacchetto puo' anche andar perso.
    Non ho utilizzato il pool, faccio gestire il thread direttamente ad ogni timer
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Poker1
    Allora ho fatto cosi':
    ho creato un Vector contenente oggetti del tipo IP:Porta ( piu altre informazioni che mi servono ) e Timer.
    Quindi, ad ogni timer del vector ho associato un MioTimerTask il quale deve fare un meccanismo di ping-pong.
    Se il timer viene rallentato non e' una grande perdita per me in quanto non deve essere preciso al millesimo, visto che utilizzo UDP e il pacchetto puo' anche andar perso.
    Non ho utilizzato il pool, faccio gestire il thread direttamente ad ogni timer
    Guarda che non è necessario avere 1 Timer per ogni TimerTask!! Basta 1 solo Timer per gestire molti TimerTask (la documentazione di Timer dice che per come è implementato, è in grado di gestire tranquillamente anche migliaia di task!).
    Poi comunque un Vector lo vedo inutile. Definisci la tua classe che estende TimerTask in modo che possa ricevere nel costruttore i dati che ti servono. Quindi istanzi 1 Timer, istanzi i tuoi N task e li scheduli con il metodo schedule di Timer.
    Tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    ah credevo che servisse un timer diverso per ogni "conteggio".
    Cmq, il vector mi serve per tenere questa lista di indirizzi perche' a volte potrei rimuoverne qualcuno.
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.