串口通信,设置WaitCommEvent等待EV_RXCHAR事件为什么会发生2次.
我把电脑串口的2脚和3脚连接在连在一起(收到数据立刻返回).
设置WaitCommEvent等待EV_RXCHAR事件时,但是如果我发送一次数据就立刻会看到发生两次EV_RXCHAR事件.
搞不清楚为什么会发生两次读取事件???
一个侦听串口所有事件线程代码如下:
/*等待串口事件线程*/
UINT WINAPI WaitEventFunc(LPVOID lpParam)
{
HANDLE hEventCom = (HANDLE)lpParam; /*串口句柄*/
DWORD dwEventMask=0; /*发生的事件*/
OVERLAPPED Ovlap;
ZeroMemory(&Ovlap, sizeof(OVERLAPPED));
Ovlap.hEvent = g_EventEvent;
if(!WaitCommEvent(hEventCom,&dwEventMask,&Ovlap)){
if(SHOWERROR_NumF(ERROR_IO_PENDING)){
printf("Event:出错\n");
}
}
while(TRUE){
WaitForSingleObject(Ovlap.hEvent,INFINITE);
ResetEvent(Ovlap.hEvent);
switch(dwEventMask)
{
case EV_BREAK:
/*向主线程发送端口中断消息*/
printf("Event:向主线程发送端口中断消息\n");
break;
case EV_CTS:
printf("Event:CTS信号发生变化\n");
break;
case EV_DSR:
/*向主线程发送端口状态消息*/
printf("Event:向主线程发送端口状态消息\n");
break;
case EV_ERR:
/*向主线程发送端口错误消息*/
printf("Event:向主线程发送端口错误消息\n");
break;
case EV_RXFLAG:
/*向主线程发送接收特殊字符消息,通知主线程读*/
printf("Event:读取特殊字符\n");
break;
case EV_RXCHAR:
/*向主线程发送接收字符消息,通知主线程读*/
printf("Event:读取字符\n");
break;
case EV_TXEMPTY:
/*向主线程发送数据已发送消息*/
printf("Event:数据已发送\n");
break;
}
WaitCommEvent(hEventCom,&dwEventMask,&Ovlap);
}
}