以下示例代码打开重叠I / O的串行端口,创建一个事件掩码来监视CTS和DSR信号,然后等待事件发生。执行WaitCommEvent功能作为重叠操作,因此进程的其他线程不能在等待期间执行I / O操作。
HANDLE hCom;
OVERLAPPED o;
BOOL fSuccess;
DWORD dwEvtMask;
hCom = CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
0,/ *独占访问* /
NULL,/ *无安全attrs * /
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL
);
if (hCom == INVALID_HANDLE_VALUE) {
/ *处理错误。*/
}
/ *设置事件掩码。*/
fSuccess = SetCommMask(hCom, EV_CTS | EV_DSR);
if(!fSuccess){
/ *处理错误* /
}
/ *创建一个用于WaitCommEvent的事件对象。*/
o.hEvent = CreateEvent(NULL, /* no security attributes */
FALSE / *自动复位事件* /
假,/ *没有信号* /
NULL / *无名称* /
);
assert(o.hEvent);
if(WaitCommEvent(hCom,& dwEvtMask,& o)){
if(dwEvtMask & EV_DSR){
/*
* . . .
*/
}
if(dwEvtMask & EV_CTS){
/*
* . . .
*/
}
}