数据显示来不及---怎么办?(100分)

  • 主题发起人 主题发起人 scloudy
  • 开始时间 开始时间
S

scloudy

Unregistered / Unconfirmed
GUEST, unregistred user!
我已编了一个串口数据接收程序,数据是以4800bps/秒传送来的,我原先的处理方式是:
在每接收完一行后,把数据写入数据库,然后再读到DBGrid中,可遇到的问题是:当还未把上一行读入DBGrid时,下一行记录又接收进来了,这样造成DBGrid中很多单元是空的,不得不再重发一次,请问有何改进方法?(可以不写入数据库)
数据格式:
A2003032B$104007 9901$B07 9902$B07 9903$B07 9904$EBEFF
($和$之间是一个数据,本行共四个数据),当我该行最后一个数据(B07 9904)还未处理完,第二行数据又来了,导致这个数据显示不出来,而我又要求实时显示数据,该咋办?
 
要求不高可以采用应答方式,就是你显示完毕,再向对方发请求下一个数据。
 
>,而我又要求实时显示数据,
这就不能实时了。自己再建个缓冲区,做点延时
 
前一阵,我做了个与下属各单位通过串口互发文件的小程序。
我是这样做的:
1。发送端发送完一块数据后,就处于等待状态。
2。接收端收到一快数据后,就进行处理,处理完毕后,就向
发送端送出一特殊字符串,告之可以发送下一块数据。
3。发送端在收到这个特殊的字符串后,就接着发送下一块数据。
如此循环直到全部发送完毕。

当然与沈前卫兄的指导思想是一致的。

不过借scloudy的宝地,请教前卫兄一下,如果要求高的话应该怎样处理?
 
我认为,要求高呢就自己建个缓冲区。与walala的方法相同.
 
同步就用第一种方法;
异步就用第二种方法;
 
用个队列,用2个线程,一个线程专门收数据再写入队列
另一个线程专门从队列中读出数据写入数据库
 
如果你用的是两层应用程序,你可以在DATASET上写代码,当DATASET新增一条记录
时,通知DBGRID刷新。建缓冲区不可取。
 
数据是一天八小时不停发送的,发送端是不会发信号过来的.请各位再劳神多为小弟想点儿办法.
如果建缓冲,请问该如何操作?(小弟以前从未做过).
 
先把数据读到自己的一个缓冲区比如一个字符串,然后从字符串读入数据库,
这样可以防止串口控件的缓冲用完。
但你的问题是随着数据的到来太快,读入库中再读出显得赶不上,所以我
认为你应该不用dbgrid来读数据,而是直接用stringgrid,把串口读入的
数据先写在grid里,在写库。
如果还不行,再两次读串口之间判断间隔,如果短于某个定值,只读入库中
而不要显示。
 
间隔是时间间隔。
 
我想主要是要使用多线程
 
接受答案了.
 
后退
顶部