疯了,疯了,接收数据用tchart画线出现间歇停顿现象!!!帮忙分析分析(50分)

  • 主题发起人 主题发起人 lcl_003
  • 开始时间 开始时间
L

lcl_003

Unregistered / Unconfirmed
GUEST, unregistred user!
接收数据用tchart画线出现间歇停顿现象!!!

我从另外一台机器接收数据,然后用chart画出来,传过来的数据是正弦波的曲线,
刚开始画的时候还可以正常画几个周期,但是再往后就会出现chart间歇停顿的现象
而且好象操作系统也间歇停止响应,百思不得其解。

具体情况如下:

传过来的数据很长,我把他付给数组,长度有5280。大概500ms传过来一批。我把这些
数据进行计算然后用chart画出来。我接收也是定时(300ms)接收。
这是我接收的timer里的代码
var
send,recv:array of byte;
j:integer;

setlength(send,3);
setlength(recv,5280);
send[0]:=3; //我要发送的数据
send[1]:=0;
send[2]:=40;
SendData(lsn[2],send); //SendData,RecvData是调用动态连接库,就是发送和接受数据
RecvData(lsn[2],recv); //接收的数据付给recv
if recv[3]=1 then
for j:=0 to 49 do
begin
tmpn:=recv[j*96+345]*256+recv[j*96+344]; //我进行一些计算付给另外的数组 valcom1[2,j]:=(tmpn-regda1) / regda1;
end;



在我画线的timer里的代码如下:
for i:=0 to 49 do //一次画50点
series1.Add(valcom1[2,i]*Tfull1[combobox1.ItemIndex+1]);


我现在实在找不出是那里的毛病了,不过有两个地方值得怀疑:
1,通信过程
2,就是我定义的数组太长了,所以我创建动态数组,但是我觉得这里是最值得怀疑的地方
因timer没运行一次就会重新分配一次数组长度,要每300ms左右分配5280长度的数组,
会不会是这里出现处理不过来的现象?
但是我把动态定义的数组改成静态的也不行:(

我实在是想不出那里有问题了
各位帮忙分析分析吧:(
 
在你感觉紧张地方加句:
Application.ProcessMessages;试一下。
语句执行了,也许是显示没有跟上。
 
我试试,不过,我另外写了个小东西,chart不可能跟不上啊:(
 
调用
Series1.BeginUpdate;
....
Series1.EndUpdate;
可以有效的减少画图次数,提高大数据量操作的效率。
 
天与地, 我试 了,不行
轻松虎, 我试试
 
1、应该先确定是不是传输来的数据有问题,有一个可以替代数据的比较好的办法是用指针链来实现。
2、查看链里面的数据,确认里面的数据是不是正确的。
3、在确认传输进来的数据是正确的基础上,再画线。
 
你把定时接收的时间设长点试试。
还有其它你认为会占用系统资源较大的定时器时间也设长点。
最好不要用定时器,重新开个进程好啦
 
哦,问题的原因找到了,是通信过程出的问题。我现在也在考虑用多线程,大家给点建议
 
多线程好
 
那问个多线程的问题,我想在一个线程里定时的读取数据,那这个“定时”如何实现?不会
是用timer吧?那我这样做就没意义了啊。

 
是你接收的数据的混乱所致。我以前也碰到此类问题,请检验你的数据,接收为文本比较一下。
 
我想用定时器定时创建线程比较方便点,但要注意不要重复创建。
 
:),先给分吧,新问题发个新贴吧。不要“派生”好不好。
 
多人接受答案了。
 
后退
顶部