MFC中读取串口时数据总是不全,请问各位大侠有什么方式可以全部读好,谢谢了 数据mfc异步 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 即使你有2K数据,发送也是分块进行的,RS232的底层发送缓冲没有这么大,但接收缓冲区可以设的大一些。程序中检查接收的数据长度,收到的长度与缓冲区数据量相同时说明接收完成,此时可全部读入。例:// 接收数据void CCommThread::ReceiveData(void){ byte myByte[1024]; DWORD dwErrors; // 错误信息 COMSTAT Rcs; // COMSTAT结构通信设备的当前信息 int Len=0;LOOP: ClearCommError(hCom, &dwErrors, &Rcs); // 获取读缓冲区数据长度 if(Len!=Rcs.cbInQue) // 数据未收完 { Len=Rcs.cbInQue; Sleep(3); goto LOOP; // 再接收 } if(Len<1) // 无数据 return; // 读缓冲区并处理收到的数据 if(ReadFile(hCom, &myByte, Len, NULL, &Rol)) { //****************************// PopToUdp(myByte,Len,true); //**************************** // 报告数据 byte* p=new byte[Len]; memcpy(p,myByte,Len); ReportUp(RS_RECEIVE,p,Len); }// Sleep(10); // 此处无,将使下一次读不稳定,可能读不到结果 fStopMsg=false; // 允许事件函数发送消息} ACE编译的问题 VC创建的ActiveX对象与脚本交互? 为什么我指定了_UNICODE,编译却通不过? 请问如何调整Formview的大小? 请教问题 关于组件注册时使用的.R|EG文件 关于透明位图 UDP中使用,为什么取不到对端的IP和端口? sans(sans),我上一个帖子漏了给你分,请到这里来拿 在MFC中,有一个缓冲区(大小上万)如何快速显示到EDIT控件中 openssl vs2008配置链接报错 MFC中读取串口时数据总是不全,请问各位大侠有什么方式可以全部读好,谢谢了
void CCommThread::ReceiveData(void)
{
byte myByte[1024];
DWORD dwErrors; // 错误信息
COMSTAT Rcs; // COMSTAT结构通信设备的当前信息
int Len=0;
LOOP:
ClearCommError(hCom,
&dwErrors,
&Rcs); // 获取读缓冲区数据长度
if(Len!=Rcs.cbInQue) // 数据未收完
{
Len=Rcs.cbInQue;
Sleep(3);
goto LOOP; // 再接收
} if(Len<1) // 无数据
return; // 读缓冲区并处理收到的数据
if(ReadFile(hCom,
&myByte,
Len,
NULL,
&Rol))
{
//****************************
// PopToUdp(myByte,Len,true);
//****************************
// 报告数据
byte* p=new byte[Len];
memcpy(p,myByte,Len);
ReportUp(RS_RECEIVE,p,Len);
}
// Sleep(10); // 此处无,将使下一次读不稳定,可能读不到结果
fStopMsg=false; // 允许事件函数发送消息
}