Eventi di comunicazione

Un processo può monitorare un set di eventi che si verificano in una risorsa di comunicazione. Ad esempio, un'applicazione può usare il monitoraggio degli eventi per determinare quando lo stato di modifica del cts (clear-to-send) e del DSR (data-set-ready).

Un processo può monitorare gli eventi in una determinata risorsa di comunicazione usando la funzione SetCommMask per creare una maschera eventi. Per determinare la maschera evento corrente per una risorsa di comunicazione, un processo può usare la funzione GetCommMask. I valori seguenti specificano gli eventi che possono essere monitorati.

Valore Significato
EV_BREAK È stata rilevata un'interruzione nell'input.
EV_CTS Lo stato del segnale CTS (clear-to-send) è cambiato.
EV_DSR Lo stato del segnale DSR (data-set-ready) è cambiato.
EV_ERR Si è verificato un errore di stato della riga. Gli errori di stato riga sono CE_FRAME, CE_OVERRUN e CE_RXPARITY.
EV_RING È stato rilevato un indicatore sonoro.
EV_RLSD Lo stato del segnale RLSD (receive-line-signal-detect) è cambiato.
EV_RXCHAR Un carattere è stato ricevuto e inserito nel buffer di input.
EV_RXFLAG Il carattere evento è stato ricevuto e inserito nel buffer di input. Il carattere di evento viene specificato nella struttura DCB del dispositivo, che viene applicata a una porta seriale tramite la funzione SetCommState.
EV_TXEMPTY L'ultimo carattere nel buffer di output è stato inviato.

 

Dopo aver specificato un set di eventi, un processo usa la funzione WaitCommEvent per attendere che si verifichi uno degli eventi. WaitCommEvent può essere usato in modo sincrono o come operazione sovrapposta. Per altre informazioni sull'esecuzione di una funzione come operazione sovrapposta, vedere Sincronizzazione.

Quando si verifica uno degli eventi specificati nella maschera eventi, il processo completa l'operazione di attesa e imposta una variabile maschera evento per indicare il tipo di evento rilevato. Se setCommMask viene chiamato per una risorsa di comunicazione mentre un'attesa è in sospeso per tale risorsa, WaitCommEvent restituisce un errore.

La funzione WaitCommEvent rileva gli eventi che si sono verificati dall'ultima chiamata a SetCommMask o WaitCommEvent. Ad esempio, se si specifica l'evento EV_RXCHAR come evento di attesa soddisfacente, una chiamata a WaitCommEvent verrà soddisfatta se nel buffer di input del driver sono presenti caratteri che sono arrivati dall'ultima chiamata a WaitCommEvent o SetCommMask. Pertanto, data la pseudocodice seguente, tutti i caratteri ricevuti tra T1 e T2 soddisfano la chiamata successiva a WaitCommEvent.

while (!bFinished) 
{ 
    WaitCommEvent(args)
 
T1: // Read bytes 
    // Process bytes 

T2: 
}

Quando si monitora un evento che si verifica quando un segnale (CTS, DSR e così via) cambia stato, WaitCommEvent segnala la modifica, ma non lo stato corrente. Per eseguire una query sullo stato corrente di CTS (clear-to-send), DSR (data-set-ready), RLSD (receive-line-signal-detect) e segnali di indicatore circolare, un processo può usare la funzione GetCommModemStatus.