Dela via


Kommunikationshändelser

En process kan övervaka en uppsättning händelser som inträffar i en kommunikationsresurs. Ett program kan till exempel använda händelseövervakning för att avgöra när CTS (klar-till-skicka) och DSR (datauppsättningsklar) signalerar ändringstillstånd.

En process kan övervaka händelser på en viss kommunikationsresurs med hjälp av funktionen SetCommMask för att skapa en händelsemask. För att fastställa den aktuella händelsemasken för en kommunikationsresurs kan en process använda funktionen GetCommMask. Följande värden anger händelser som kan övervakas.

Värde Betydelse
EV_BREAK En paus upptäcktes vid indata.
EV_CTS CTS-signalen (clear-to-send) ändrade tillstånd.
EV_DSR DSR-signalen (data-set-ready) ändrade tillstånd.
EV_ERR Ett radstatusfel uppstod. Radstatusfel är CE_FRAME, CE_OVERRUNoch CE_RXPARITY.
EV_RING En ringindikator har identifierats.
EV_RLSD RLSD-signalen (receive-line-signal-detect) ändrade tillstånd.
EV_RXCHAR Ett tecken togs emot och placerades i indatabufferten.
EV_RXFLAG Händelsetecknet togs emot och placerades i indatabufferten. Händelsetecknet anges i enhetens DCB- struktur, som tillämpas på en serieport med hjälp av funktionen SetCommState.
EV_TXEMPTY Det sista tecknet i utdatabufferten skickades.

 

När en uppsättning händelser har angetts använder en process funktionen WaitCommEvent för att vänta tills någon av händelserna inträffar. WaitCommEvent kan användas synkront eller som en överlappande åtgärd. Mer information om hur du kör en funktion som en överlappande åtgärd finns i Synkronisering.

När en av händelserna som anges i händelsemasken inträffar slutför processen vänteåtgärden och anger en händelsemaskvariabel som anger vilken typ av händelse som identifieras. Om SetCommMask- anropas för en kommunikationsresurs medan en väntan väntar på resursen returnerar WaitCommEvent ett fel.

Funktionen WaitCommEvent identifierar händelser som har inträffat sedan det senaste anropet till SetCommMask eller WaitCommEvent. Om du till exempel anger händelsen EV_RXCHAR som en väntande händelse, kommer ett anrop till WaitCommEvent att uppfyllas om det finns tecken i drivrutinens indatabuffert som har kommit sedan det senaste anropet till WaitCommEvent eller SetCommMask. Med hjälp av följande pseudokod uppfyller alla tecken som tas emot mellan T1 och T2 nästa anrop till WaitCommEvent.

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

T2: 
}

När du övervakar en händelse som inträffar när en signal (CTS, DSR och så vidare) ändras, rapporterar WaitCommEvent ändringen, men inte det aktuella tillståndet. Om du vill köra frågor mot det aktuella tillståndet för CTS (clear-to-send), DSR (data-set-ready), RLSD (receive-line-signal-detect) och ringindikatorsignaler kan en process använda funktionen GetCommModemStatus.