一个串口监视的小问题
程序是这样的:
CreateFile打开串口(异步方式)
配置dcb,缓冲长度,超时等。。
PurgeComm();
ClearCommError();
然后创建结构OVERLAPPED变量ov,并
ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
SetCommMask(串口句柄, EV_XRCHAR); //设置事件掩码,这里只用了EV_XRCHAR。
DWORD dwEvtMask;
while(true)
{
WaitCommEvent(串口句柄,&dwEvtMask, &ov);
如果GetLastError() == ERROR_IO_PENDING
{
WaitForSingleObject(ov.hEvent, 10000);
然后是根据dwEvtMask的值,做不同的处理的switch语句,就像这样:
switch(dwEvtMask)
{
case xxxx: 某种处理。。
case xxxx: 某种处理。。。
}
}
}
程序完,好笑的事情来了。在WaitForSingleObject()等待的10秒内,明明发生了串口接收到数据的事件。
可WaitForSingleObject()函数就是不返回,非要等到10秒超时后才返回,
返回之后,我查dwEvtMask的值,的确等于0x01,也就是EV_XRCHAR的值。
而且这是用ReadFile读出串口缓冲的内容,也是正确的字符串:“123”。(我用另外一台机,在串口上发的)
我肯定是哪里理解错误,请各位不吝赐教~~谢谢
}