Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Forse mi serve utilizzare i Thread

    Buongiorno a tutti.
    l mio problema è il seguente...
    Ho realizzato un programma in Java con un JFrame (utilizzo Swing).
    Il programma va a leggere/scrivere, ogni 100ms, da/in un PLC.
    Per chi non fosse pratico di PLC può equipararlo ad un database: creo la connessione, lancio funzioni per leggere o scrivere dei dati e chiudo la connessione.

    Nel main del programma richiamo un Timer come da codice qui sotto.
    codice:
    private static Timer tmrGenerale = new Timer(100, new java.awt.event.ActionListener() {
       // Fremo il timer
       tmrGenerale.stop();
       // Leggo e scrivo i dati dal/sul PLC
       ..............
       // Riavvio il timer
       tmrGenerale.start();
    }
    Il programma funziona correttamente ma presenta un inconveniente in quanto, soprattutto quando vado a leggere/scrivere quantità di dati elevate, il programma rimane bloccato per il tempo necessario a concludere tali operazioni. In quei momenti il programma rimane bloccato e risulta difficoltoso eseguire operazioni come navigare tra i menu e tutte le operazioni da eseguire con il mouse.

    Per ovviare a questo problema ho trovato in rete dei riferimenti ai Tread per far eseguire le operazioni di lettura/scrittura in "parallelo" rispetto al resto del programma.
    Prima di lanciarmi a testa bassa nello studio dei Thread desidero capire se sto andando nella direzione giusta oppure se vi sono soluzioni migliori.

    Se poteste indicarmi la direzione da prendere per ovviare al mio problema, avrete la mia eterna gratitudine

    Grazie in anticipo per l'attenzione prestatami

  2. #2

    Re: Forse mi serve utilizzare i Thread

    Originariamente inviato da LupusImprobus
    Il programma funziona correttamente ma presenta un inconveniente in quanto, soprattutto quando vado a leggere/scrivere quantità di dati elevate, il programma rimane bloccato per il tempo necessario a concludere tali operazioni. In quei momenti il programma rimane bloccato e risulta difficoltoso eseguire operazioni come navigare tra i menu e tutte le operazioni da eseguire con il mouse.
    La cosa è molto strana visto che stai utilizzando il Timer giusto.

    Originariamente inviato da LupusImprobus
    Per ovviare a questo problema ho trovato in rete dei riferimenti ai Tread per far eseguire le operazioni di lettura/scrittura in "parallelo" rispetto al resto del programma.
    Prima di lanciarmi a testa bassa nello studio dei Thread desidero capire se sto andando nella direzione giusta oppure se vi sono soluzioni migliori.
    Volendo esprimere un parere personale secondo me l'uso dei Thread è una valida alternativa.

  3. #3
    Per prima cosa: grazie per la risposta.

    In effetti utilizzo il Timer basandomi su degli esempi trovati in rete e non sono certo di aver creato un applicazione ottimale.

    Ti posto il codice del main

    codice:
    import java.awt.event.ActionEvent;
    import javax.swing.AbstractAction;
    import javax.swing.Icon;
    import javax.swing.Timer;
    import org.libnodave.Nodave;
    
    public class Main {
    //--------------------------------------------------------------------------
       // Variabili globali della classe
       protected static FrmMain frmMain;
       // Variabili globali
       private static ComIsoTcp tp;
       private static int resConn;
       // Timer ciclico per lettura/scrittura dati da/su PLC
       private static Timer tmrGenerale = 
          new Timer(100, new java.awt.event.ActionListener() public void 
          actionPerformed(java.awt.event.ActionEvent e) {
          //-------------------------------------------------------------------
          // Arresto il timer per il tempo necessario all'esecuzione delle
          // operazioni di lettura e scrittura
          tmrGenerale.stop();
          //-------------------------------------------------------------------
          // leggo/scrivo i dati sul PLC   
          //-------------------------------------------------------------------
          // Abilito timer
          tmrGenerale.start();
       }
    });
    
    public static void main(String[] args) {
       FileINI.leggiINI();
       // Abilito timer
       tmrGenerale.start();
       frmMain = new FrmMain();
       frmMain.setVisible(true);
       FileINI.scriviINI();
    }
    
    }
    Quindi...
    Questo è quello che faccio.
    Il Main crea il JFrame e intanto gestisce l'aggiornamento delle variabili lette/scritte sul PLC.
    Come ho detto, quando richiamo una funzione di lettura/scrittura questa mi blocca l'esecuzione del programma, quindi anche l'interfacci grafica, per alcuni istanti dando la spiacevole sensazione di andare a scatti.

    Grazie anche per il parere sui Thread, mi mettero a studiare

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 © 2026 vBulletin Solutions, Inc. All rights reserved.