求助MScomm 通讯时间 问题

lei84320123 2012-12-11 11:10:40
各位大神好,

最近用MScomm做串口通讯,需要实时的获取一些参数来进行控制,但是按照事件响应的方法,测试过接收数据的时间居然达到了35ms,这对我的程序来说是严重滞后的。有什么其他办法能加快速度吗?


在线等啊!!!!!

代码的主要部分:
初始化:

if(m_cComm1.get_PortOpen())

m_cComm1.put_PortOpen(FALSE);
m_cComm1.put_CommPort(11);
m_cComm1.put_InputMode(1);
m_cComm1.put_InBufferSize(1024); //设置输入缓冲区
m_cComm1.put_OutBufferSize(512); //设置输出缓冲区
m_cComm1.put_Settings(_T("9600,n,8,1"));//波特率,无校验,个数据位,个停止位

if(!m_cComm1.get_PortOpen())
{
m_cComm1.put_PortOpen(TRUE); //打开串口
m_cComm1.put_RThreshold(1); //每当接收缓冲区有个字符则接收串口数据
m_cComm1.put_InputLen(0); //设置当前缓冲区长度为
m_cComm1.get_Input(); //预读缓冲区以清除残留数据
}

else
AfxMessageBox("打开端口失败!",MB_ICONSTOP,0);

事件处理:
VARIANT variant_inp2;
COleSafeArray safearray_inp2;
long len2,k2;
byte rxdata2[512]; //设置BYTE数组
CString strtemp2;
//m_strRecvData2.Empty();
if(m_cComm2.get_CommEvent()==2) //值为表示接收缓冲区内有字符
{
variant_inp2=m_cComm2.get_Input(); //读缓冲区消息
safearray_inp2=variant_inp2; ///变量转换
len2=safearray_inp2.GetOneDimSize(); //得到有效的数据长度
for(k2=0;k2<len2;k2++)
safearray_inp2.GetElement(&k2,rxdata2+k2);
for(k2=0;k2<len2;k2++) //将数组转换为CString型变量
{
char bt=*(char*)(rxdata2+k2); //字符型
strtemp2.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strRecvData2+=strtemp2; //加入接收编辑框对应字符串
}
}

CString temp=""; //显示完成后要自动换行

m_strRecvData2+=temp;
UpdateData(FALSE); //更新编辑框内容
...全文
127 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
我不懂电脑 2012-12-11
  • 打赏
  • 举报
回复
用阻塞模式实时收,事件模式很多要等积累到一定数据才触发

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧