Compartir a través de


Eventos de comunicaciones

Un proceso puede supervisar un conjunto de eventos que se producen en un recurso de comunicaciones. Por ejemplo, una aplicación puede usar la supervisión de eventos para determinar cuándo cambia el estado de cambio de las señales de CTS (sin cifrar para enviar) y DSR (listo para el conjunto de datos).

Un proceso puede supervisar eventos en un recurso de comunicaciones determinado mediante la función SetCommMask para crear una máscara de eventos. Para determinar la máscara de eventos actual de un recurso de comunicaciones, un proceso puede usar la función GetCommMask . Los valores siguientes especifican eventos que se pueden supervisar.

Valor Significado
EV_BREAK Se ha detectado una interrupción en la entrada.
EV_CTS La señal CTS (clear-to-send) ha cambiado el estado.
EV_DSR La señal DSR (lista para el conjunto de datos) cambió el estado.
EV_ERR Error de estado de línea. Los errores de estado de línea son CE_FRAME, CE_OVERRUN y CE_RXPARITY.
EV_RING Se ha detectado un indicador de llamada.
EV_RLSD El estado de la señal RLSD (receive-line-signal-detect).
EV_RXCHAR Se ha recibido y colocado un carácter en el búfer de entrada.
EV_RXFLAG Se recibió el carácter de evento y se colocó en el búfer de entrada. El carácter de evento se especifica en la estructura DCB del dispositivo, que se aplica a un puerto serie mediante la función SetCommState .
EV_TXEMPTY Se envió el último carácter del búfer de salida.

 

Una vez especificado un conjunto de eventos, un proceso usa la función WaitCommEvent para esperar a que se produzca uno de los eventos. WaitCommEvent se puede usar de forma sincrónica o como una operación superpuesta. Para obtener información adicional sobre cómo ejecutar una función como una operación superpuesta, vea Sincronización.

Cuando se produce uno de los eventos especificados en la máscara de eventos, el proceso completa la operación de espera y establece una variable de máscara de eventos para indicar el tipo de evento detectado. Si se llama a SetCommMask para un recurso de comunicaciones mientras hay una espera pendiente para ese recurso, WaitCommEvent devuelve un error.

La función WaitCommEvent detecta eventos que se han producido desde la última llamada a SetCommMask o WaitCommEvent. Por ejemplo, si especifica el evento EV_RXCHAR como un evento que satisface la espera, se cumplirá una llamada a WaitCommEvent si hay caracteres en el búfer de entrada del controlador que han llegado desde la última llamada a WaitCommEvent o SetCommMask. Por lo tanto, dado el pseudocódigo siguiente, los caracteres recibidos entre T1 y T2 cumplirán la siguiente llamada a WaitCommEvent.

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

T2: 
}

Al supervisar un evento que se produce cuando una señal (CTS, DSR, etc.) cambia el estado, WaitCommEvent notifica el cambio, pero no el estado actual. Para consultar el estado actual del CTS (clear-to-send), DSR (data-set-ready), RLSD (receive-line-signal-detect) y las señales de indicador de anillo, un proceso puede usar la función GetCommModemStatus .