Visualizzazione dei risultati da 1 a 8 su 8

Hybrid View

  1. #1
    Quote Originariamente inviata da Arago Visualizza il messaggio
    Grazie MItaly
    Grazie della delucidazione.
    Devo ammettere che non ho capito bene quello che mi hai scritto. Sicuramente perchè:
    -mi manca ancora il concetto di thread
    Il concetto è abbastanza semplice: nello stesso processo, ci sono più "fili" di esecuzione che procedono in parallelo; puoi pensarli come più processori che lavorano indipendentemente ma avendo condivisa la memoria (in pratica se sono in esecuzione più thread dei core disponibili la cosa viene gestita "dando" la CPU per un tot di tempo a turno a ciascun thread).
    -di conseguenza non ho capito come facci a far lavorare la mia applicazione su thread diversi
    Che cosa stai usando per gestire i byte ricevuti dalla seriale? Controlli con un timer ogni tot? Ricevi degli eventi da un oggetto usato per gestire la porta seriale?
    -ho investito 3 giorni su delegati ed eventi su 3 libri diversi e ancora non li ho assorbiti del tutto.
    Fai conto che un delegate è concettualmente simile ad un puntatore a funzione.
    Ultima modifica di MItaly; 28-03-2014 a 01:18
    Amaro C++, il gusto pieno dell'undefined behavior.

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    12
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Che cosa stai usando per gestire i byte ricevuti dalla seriale? Controlli con un timer ogni tot? Ricevi degli eventi da un oggetto usato per gestire la porta seriale?
    Uso una SerialPort.
    Nella dll (per ora) c'è solo un'istanza a una serial port:
    codice:
    //Costruttore
            public TARGHAprotocoll()
            {
                //Costruttore
                PortaComunicazione = new SerialPort();
                PortaComunicazione.DataReceived += new SerialDataReceivedEventHandler(EventoRicezionePortaSeriale);
            }
            public SerialPort PortaComunicazione;
    Tutto il codice che decodifica il pacchetto è all'interno dell'evento SerialDataReceivedEventArgs.
    Non vengono richiamati metodi al suo interno. Ci sono dei for, Case switch e degli if che controllano tutti i byte in arrivo. Il codice è lungo da postare ma provo a riassumerlo
    codice:
    private void EventoRicezionePortaSeriale(object sender, SerialDataReceivedEventArgs e)
            {
                int numeroDiDatiRicevuti = PortaComunicazione.BytesToRead;    
                byte[] bufferRxPresenti = new byte[numeroDiDatiRicevuti];
                int numeroDatiDaLeggere = PortaComunicazione.Read(bufferRxPresenti, 0, numeroDiDatiRicevuti);                                                              
                if (numeroDatiDaLeggere == 0)                                                          
                    return;                                                                            
                for (int tempIndex = 0; tempIndex < numeroDiDatiRicevuti; tempIndex++)
    
    //Da qui partono tutta una serie di controlli che decodificano il messaggio
    
    
    //Ad un certo punto, quando viene decodificato il messaggio, genero un nuovo evento. 
    //Proprio l'evento che poi mi da l'errore descritto in questo post
    MessaggioTHARGAricevuto(this, new MessaggioTHARGAricevutoEventArgs());
    //E come vedi, l'evento viene generato prima che si chiuda la graffa 
    //che termina il SerialDataReceivedEventArgs
            }
    Come altra informazione posso dire che l'idea del dll mi è venuta perchè questo protocollo lo dovrò usare costantemente in diversi progetti. Invece di scriverlo o copiarlo ogni volta ho pensato di fare una dll fissa che contenesse tutto il necessario.
    Prima di questo facevo proprio il copia incolla di tutto il codice e facendo così funzionava.
    Intendo, avere l'istanza della seriale e tutti i metodi nel medesimo file (che però era un form).
    Effettivamente quando il codice doveva dichiarare un messaggio valido usavo un comando diverso:

    this.Invoke(new EventHandler(ScritturaSuDisplayOrigine));
    Ultima modifica di Arago; 28-03-2014 a 09:58

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.