串行通讯时接收数据问题!

xuanfeng1221 xuanfeng1221 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在上位机和下位机通讯时,上位机发送一指令后想等待返回数据,自制了一数据接收函数,但调试时发现执行此函数时,如果接收缓冲区里没有数据则跳出函数,不进行等待。郁闷了。请高手指点我错在哪里,我想要在该程序里停止下来,直到接收缓冲区有数据并读出后返回。
void CFY3NO2View::GetDataFromCom()//接收8031发来的数据.
{

DWORD dwEvtMaskX;
OVERLAPPED osRead;
DWORD dwErrorFlags;
COMSTAT ComStat;
DWORD dwLength=0,NUM;
BYTE abln;
char adn[9];

osRead.Offset = 0;
osRead.OffsetHigh = 0;

osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);

if(osRead.hEvent==NULL)
{
AfxMessageBox("建立事件失败!", MB_OK, 0 );

}
if(!SetCommMask( COMFile,EV_RXCHAR))


dwEvtMaskX=0;
WaitCommEvent( COMFile,&dwEvtMaskX,&osRead );//本想在此等待,但如没有数据, 函数返回。如何才能留住CPU的脚步呢?
if((dwEvtMaskX&EV_RXCHAR)==EV_RXCHAR)
{ int i=0;

do{
ClearCommError( COMFile,&dwErrorFlags,&ComStat);
dwLength=ComStat.cbInQue;


if(dwLength>0)
{

ReadFile( COMFile,&abln,1,&NUM,&osRead);//

GetComDate[i]=abln;

}
else GetComDate[i]=11;
i++;
}while(dwLength>0);


}

CloseHandle(osRead.hEvent);


}
...全文
评论 5
收藏 已收藏
分享
返回顶部
xuanfeng1221
VC/MFC 16,550 成员 421,606 内容