Compartilhar 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ção, um processo pode usar a função GetCommMask. Os valores a seguir especificam eventos que podem ser monitorados.

Valor Significado
EV_BREAK Uma interrupção foi detectada na entrada.
EV_CTS O sinal CTS (desmarcado para enviar) alterou o estado.
EV_DSR O sinal DSR (pronto para conjunto de dados) alterou o estado.
EV_ERR Ocorreu um erro de status de linha. Os erros de status de linha são CE_FRAME, CE_OVERRUNe CE_RXPARITY.
EV_RING Um indicador de anel foi detectado.
EV_RLSD O sinal RLSD (receive-line-signal-detect) alterou o 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ção SetCommState.
EV_TXEMPTY O último caractere no buffer de saída foi enviado.

 

Depois que um conjunto de eventos é especificado, um processo usa a função WaitCommEvent 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 de sincronização.

Quando um dos eventos especificados na máscara de evento 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 detectado. Se oSetCommMaskfor chamado para um recurso de comunicação enquanto uma espera estiver pendente para esse recurso, WaitCommEvent retornará um erro.

A função WaitCommEvent detecta eventos que ocorreram desde a última chamada para SetCommMask ou WaitCommEvent. Por exemplo, se você especificar o evento EV_RXCHAR como um evento que satisfaz a espera, uma chamada para WaitCommEvent será atendida se houver caracteres no buffer de entrada do driver que chegaram desde a última chamada para WaitCommEvent ou SetCommMask. Assim, considerando o pseudocódigo a seguir, todos os caracteres recebidos entre T1 e T2 atenderão à 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) altera o estado, WaitCommEvent relata a alteração, mas não o estado atual. Para consultar o estado atual do CTS (clear-to-send), DSR (data-set-ready), RLSD (receive-line-signal-detect) e sinais de indicador de anel, um processo pode usar a função GetCommModemStatus.