首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

串品接收数据出现buffer is empty异常

2012-05-06 
串品接收数据出现buffer is empty错误通过ApdComPortW获取串口传来的数据后,放到字符串receive中,再输出到

串品接收数据出现buffer is empty错误

通过ApdComPortW获取串口传来的数据后,放到字符串receive中,再输出到Memo1中,调试时输出内容是正确的,可是出现了“buffer is empty”错误。
代码如下:

C/C++ code
for(int i=0;i<68;i++)  {    char C=ApdComPortW->GetChar();    switch(C)    {        case '\n':             break;        case '\r':             break;        default:             receive+=C;    }  }

我是通过Substring将receive拆分为5行,输出内容为:
2012-05-02
  11:00:43
N.W.: 0.0645Kg
T.W.: 0.0000Kg
G.W.: 0.0645Kg

求receive的长度为68.

如果把for(int i=0;i<68;i++)
改成 for(int i=0;i<Count;i++)
则没有错误,但Memo1中的输出格式有问题了,如下
2012-05-




02 11




:00:43




N.W.:  




0.0645Kg




T.W.: 




  0.0000




KgG.W.




: 0.06




45Kg






求receive的长度时出现了奇怪的问题,如下
8
6
6
8
8
6
8
6
8
4

好像receive被分成了10份。
怀疑串口的数据是不是通过10份字符串,每份8个字符来发送的,如是这样,我该怎么处理呢?


[解决办法]
给你改了一下,应该没问题
void __fastcall TForm1::ApdComPortWTriggerAvail(TObject *CP, WORD Count) { 
char C; 
for(int i=0;i<Count;i++) { 
C=ApdComPortW->GetChar(); 
switch ( C ) {
case '\r' :
break;
case '\n' :
MemoRe->Lines->Add(receive); 
receive = "";
break;
default :
receive+=C;
break;
}
}
}
[解决办法]
重新分析了一下你的程序,应该是缓冲区溢出了。
你的数据不全,不要使用这个控件了,换个接收程序,一位一位的收来再看看有什么漏掉了。

热点排行