Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    15

    [C++] Gestione eventi in C++

    Ciao a tutti,
    ho il seguente problema:
    sto utilizzando la funzione ReadFile per leggere un carattere da una porta seriale.
    Ho notato che il programma si ferma a questa funzione finchè non riceve un carattere, e poi prosegue...
    Questo carattere però mi arriva ad intervalli di tempo molto lunghi, dovrei quindi settare una specie di evento nel momento in cui mi arriva il carattere, e leggerlo solo quando arriva. Purtroppo sono abbastanza neofita, vorrei qualche consiglio, anche genereale, su come procedere.

    Grazie a tutti

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Non la ho mai usata, ma so che esiste ReadFileEx per operazioni di input asincrono.
    http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
    La struttura OVERLAPPED contiene un HANDLE a un evento che verrà segnalato quando la funzione legge qualcosa. ReadFileEx accetta anche un puntatore a funzione come ultimo parametro che verrà invocata quando la lettura sarà completa.
    Per poterla usare dovrai aprire la seriale con il flag: FILE_FLAG_OVERLAPPED.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    15
    Mmmm non mi è molto chiaro scusa...
    Potresti farmi un mini-esempio per capire meglio?

    Questo evento che genera, come lo gestisco? Devo creare una funzione a parte per gestirlo?

  4. #4
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Originariamente inviato da Lallost
    Mmmm non mi è molto chiaro scusa...
    Potresti farmi un mini-esempio per capire meglio?

    Questo evento che genera, come lo gestisco? Devo creare una funzione a parte per gestirlo?
    Leggiti bene il link e trovi anche un esempio, oltre che una descrizione dettagliata della funzione in questione.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    15
    Alla fine ho risolto in una maniera più semplice:
    ho impostato i timeout della porta, cosi la lettura dura al massimo un tempo stabilito da me

    COMMTIMEOUTS TO;
    GetCommTimeouts(portaCOM1, &TO);
    TO.ReadIntervalTimeout = 1000;
    TO.ReadTotalTimeoutConstant = 1000;
    TO.ReadTotalTimeoutMultiplier = 1000;
    SetCommTimeouts(portaCOM1, &TO);

    In questo modo la ReadFile sulla portaCOM1 dura al massimo 1 secondo: legge per 1 secondo e poi prosegue col resto del programma.

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