//打开串口
hCom=CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,//允许读写
0, //共享模式,串口不支持共享,所以为0
NULL,//定义安全属性
OPEN_EXISTING, //设置产生方式
FILE_FLAG_OVERLAPPED, //使用异步通信
NULL );
//设置dcb参数
//等待通信事件的发生
WaitCommEvent(hCom,&dwEvtMask,NULL); //问题1
if((dwEvtMask & EV_RXCHAR)==EV_RXCHAR)//有数据到来
{
dwLength=ComStat.cbInQue;
if(dwLength>0)
{
ReadFile(hCom,lpBuffer,dwLength,&dwLength,FILE_FLAG_OVERLAPPED);
}
}
if (lpBuffer !="fd") //问题2
{
//弹出错误对话框
}
else
{
//往下执行
}
这段程序的初衷是,打开com1,等待数据到来(问题1),如果数据到来,就读数据缓冲区数据,如果数据不是指定数据(问题2),弹出错误信息,否则往下执行。
问题1:为什么WaitCommEvent事件不发生,程序也往下执行?
问题2:判断接受到的数据的方法怎么写,比如我想判断是不是十六进制的 aa
如果这段程序的执行逻辑背叛了程序的初衷,那该怎么写?
hCom=CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,//允许读写
0, //共享模式,串口不支持共享,所以为0
NULL,//定义安全属性
OPEN_EXISTING, //设置产生方式
FILE_FLAG_OVERLAPPED, //使用异步通信
NULL );
//设置dcb参数
//等待通信事件的发生
WaitCommEvent(hCom,&dwEvtMask,NULL); //问题1
if((dwEvtMask & EV_RXCHAR)==EV_RXCHAR)//有数据到来
{
dwLength=ComStat.cbInQue;
if(dwLength>0)
{
ReadFile(hCom,lpBuffer,dwLength,&dwLength,FILE_FLAG_OVERLAPPED);
}
}
if (lpBuffer !="fd") //问题2
{
//弹出错误对话框
}
else
{
//往下执行
}
这段程序的初衷是,打开com1,等待数据到来(问题1),如果数据到来,就读数据缓冲区数据,如果数据不是指定数据(问题2),弹出错误信息,否则往下执行。
问题1:为什么WaitCommEvent事件不发生,程序也往下执行?
问题2:判断接受到的数据的方法怎么写,比如我想判断是不是十六进制的 aa
如果这段程序的执行逻辑背叛了程序的初衷,那该怎么写?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货