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 señales de CTS (clear-to-send) y DSR (data-set-ready).
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 detectó un salto en la entrada. |
EV_CTS | El estado de la señal CTS (clear-to-send) ha cambiado. |
EV_DSR | El estado de la señal DSR (listo para el conjunto de datos) ha cambiado. |
EV_ERR | Error de estado de línea. Los errores de estado de línea se CE_FRAME, CE_OVERRUNy CE_RXPARITY. |
EV_RING | Se detectó un indicador de anillo. |
EV_RLSD | El estado de la señal RLSD (receive-line-signal-detect). |
EV_RXCHAR | Se recibió un carácter y se colocó en el búfer de entrada. |
EV_RXFLAG | El carácter de evento se recibió y se colocó en el búfer de entrada. El carácter de evento se especifica en la estructura dedcBdel dispositivo, que se aplica a un puerto serie mediante la funciónSetCommState. |
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 pueden usar sincrónicamente o como una operación superpuesta. Para obtener información adicional sobre cómo ejecutar una función como una operación superpuesta, consulte Synchronization.
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 alSetCommMask para un recurso de comunicaciones mientras hay una espera pendiente para ese recurso, WaitCommEvent devuelve un error.
La funciónWaitCommEventdetecta 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.