Partilhar via


Eventos de Comunicação

Um processo pode monitorar um conjunto de eventos que ocorrem em um recurso de comunicação. Por exemplo, um aplicativo pode usar o monitoramento de eventos para determinar quando os sinais CTS (clear-to-send) e DSR (data-set-ready) mudam de estado.

Um processo pode monitorar eventos em um determinado recurso de comunicação usando a função SetCommMask para criar uma máscara de evento. Para determinar a máscara de evento atual para um recurso de comunicações, um processo pode usar a funçãoGetCommMask. Os valores a seguir especificam eventos que podem ser monitorados.

Valor Significado
EV_BREAK Uma quebra foi detetada na entrada.
EV_CTS O sinal CTS (clear-to-send) mudou de estado.
EV_DSR O sinal DSR (data-set-ready) mudou de estado.
EV_ERR Ocorreu um erro de estado da linha. Os erros de status de linha são CE_FRAME, CE_OVERRUNe CE_RXPARITY.
EV_RING Foi detetado um indicador de anel.
EV_RLSD O sinal RLSD (receive-line-signal-detect) mudou de estado.
EV_RXCHAR Um caractere foi recebido e colocado no buffer de entrada.
EV_RXFLAG O caractere de evento foi recebido e colocado no buffer de entrada. O caractere de evento é especificado na estrutura deDCBdo dispositivo, que é aplicada a uma porta serial usando a funçãoSetCommState.
EV_TXEMPTY O último caractere no buffer de saída foi enviado.

 

Depois que um conjunto de eventos é especificado, um processo usa a funçãoWaitCommEvent para aguardar a ocorrência de um dos eventos. WaitCommEvent pode ser usado de forma síncrona ou como uma operação sobreposta. Para obter informações adicionais sobre como executar uma função como uma operação sobreposta, consulte Synchronization.

Quando um dos eventos especificados na máscara de eventos ocorre, o processo conclui a operação de espera e define uma variável de máscara de evento para indicar o tipo de evento detetado. Se oSetCommMaskfor chamado para um recurso de comunicações enquanto uma espera estiver pendente para esse recurso, WaitCommEvent retornará um erro.

A funçãoWaitCommEvent deteta eventos que ocorreram desde a última chamada para SetCommMask ou WaitCommEvent. Por exemplo, se você especificar o evento EV_RXCHAR como um evento de satisfação de espera, uma chamada para WaitCommEvent será satisfeita se houver caracteres no buffer de entrada do driver que chegaram desde a última chamada para WaitCommEvent ou SetCommMask. Assim, dado o pseudocódigo a seguir, quaisquer caracteres recebidos entre T1 e T2 satisfarão a próxima chamada para WaitCommEvent.

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

T2: 
}

Ao monitorar um evento que ocorre quando um sinal (CTS, DSR e assim por diante) muda de estado, WaitCommEvent relata a alteração, mas não o estado atual. Para consultar o estado atual dos sinais CTS (clear-to-send), DSR (data-set-ready), RLSD (receive-line-signal-detect) e ring indicadores, um processo pode usar a funçãoGetCommModemStatus.