Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    12

    help ... problema su thread

    ciao a tutti da un neofita java....
    ho scritto un programma che si appoggia su un thread per leggere su una porta seriale.
    i dati letti dalla porta sono poi trattati da una funzione esterna (che analizza il test ricevuto) al thread, che poi restituisce i dati (string) al thread chiamante, che li completa secondo specifiche necessità e li manda attraverso un'interfaccia alla classe main.
    Il tutto sembra funzionare bene (l'elaborazione è molto semplice) ma ho oltre tre secondi di delay da qundo ricevo i dati sulla seriale a quando arrivo a visualizzarli sul main.

    avete un suggerimento?
    Grazie

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

    Re: help ... problema su thread

    Originariamente inviato da valter72
    Il tutto sembra funzionare bene (l'elaborazione è molto semplice) ma ho oltre tre secondi di delay da qundo ricevo i dati sulla seriale a quando arrivo a visualizzarli sul main.

    avete un suggerimento?
    Posta porzioni di codice significative .... senza vederlo nessuno sarebbe in grado di dire se è appropriato o meno e cosa non va e come risolverlo.
    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
    Registrato dal
    Mar 2010
    Messaggi
    12
    Giusto.
    ecco qui le parti sospette

    Grazie in anticipo.

    QUESTO E' IL THREAD

    codice:
    public void run() {
    
    		boolean	firstTime = true;
    		boolean	lastIdle = true;	
    
    		String textToDisplay = null;
    		
    		textToDisplay  = 	"*    ciao   *" + 
    						"*    ciao 2  *" +
    						"*ciao 3 *" + 
    						"*  ciao 4 *" ;
    		
    		while (true) {
    			try {
    				if (serialCommRS232.verificaDSR() == true) {
    				// se DTR / DSR off comunico che sono in IDLE
    					if ((firstTime) || (lastIdle == true)) {
    						firstTime = false;
    						lastIdle = false;
    						notifyIdleSerialDisplayListeners(false);
    						notifyTextSerialDisplayListeners(textToDisplay);
    					}
    					
    /**/ 				System.out.println("[Thread su seriale]");		
    
    					textToDisplay = caricaTesto();
    					
    					if (textToDisplay.length() >0){
    						notifyTextSerialDisplayListeners(textToDisplay);
    					}
    					
    				} else { // DSR OFF
    					if ((firstTime) || (lastIdle == false)) {
    						firstTime = false;
    						lastIdle = true;
    						notifyIdleSerialDisplayListeners(true);
    					}
    				}
    			} catch (SerialConnectionException e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			}
    			
    		}
    
    	}
    QUESTA E' LA FUNZ.

    codice:
    private String caricaTesto(){
    		String stringView = "";
    		String miaString = null;
    		short retCode = 0;
    
    		
    		int i = 0;
    		while (retCode >= 0) {
    			retCode = serialCommRS232.botRx(0,0,0); // retries, rxTimeout, wt
    			
    			if (retCode < 0)
    				break;
    			
    			/* Ricevuto caratteri */
    
    			if (serialCommRS232.strBufferRicevuto.length()>0) {
    
    				miaString  = serialCommRS232.strBufferRicevuto.toString();
    
    				for (i=0; i < miaString.length(); i++){
    					switch (miaString.charAt(i)){
    						case 0x02: //STX
    						case 0x03: //ETX
    						case 0x04: //EOT	
    						case 0x40: //@					
    						case 0x7F: // 
    							break;
    						case 0x1B: //ESC seguito da A@ o B@...etc, devo scartare la lettera A,B,C,@
    							i=i+1;  
    							break;
    						default:
    							stringView = stringView+ Character.toString(miaString.charAt(i));
    							break;
    					}
    				}
    			}	
    			System.out.println("retCode=["+retCode+"]");			
    		} // endwhile
    		
    		return stringView;
    	}

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Benvenuto sul forum.
    Ti invito fin da subito a prendere visione del Regolamento interno (valido per tutte le aree di Programmazione).

    In particolare, vi sono i punti riguardanti:
    1) Titolo delle discussioni: parole come "help", "aiuto", ecc sono inutili e rendono difficoltosa la ricerca delle discussioni. Piuttosto, va usato un titolo quanto più significativo possibile, che descriva il problema contenuto

    2) Il codice va postato indentato usando gli appositi tag CODE forniti dal forum (vedi punto 6 del regolamento linkato).

    Correggo io ove possibile.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.