通讯数据在不同窗体上的"同步" 急(50分)

  • 主题发起人 主题发起人 天空4567
  • 开始时间 开始时间

天空4567

Unregistered / Unconfirmed
GUEST, unregistred user!
想实现通讯数据在不同窗体上的"同步",即在主窗体上通过线程读出的数据,希望在其已经启动的子窗体上把该数据描绘成趋势图,怎样才能做到?
 
发送数据
 
怎样发送数据?能说得清楚一点吗?
 
把子窗体显示趋势图的模块以参数形式传到线程里“映射”为线程内部属性(比如canvas或者Tchart等)

当线程读到数据的时候就直接修改这些被“映射”过来的内部属性,由于都是指针,所以线程修改的时候子窗体上就会同步修改的
 
TO hs-kill:
谢谢你。
我目前是将主窗体的数据直接往子窗体已经画好的坐标上描点。
错误提示是:写地址错误(翻译过来就是这意思)。
你的思路应该是可行的,但具体该怎么实现呢?我用的是image的Canvas属性,
我不懂该如何“映射”。
 
建个数据库表好类
主窗体上通过线程读出的数据在线程里写到数据库里
子窗体上定时读取数据库数据库 刷新显示趋势图
 
To sirous:
谢谢你。
曾在子窗体里建了一个专门刷新趋势图的过程,用按纽来实现是没问题的,只做测试用。但,在主窗体的串口线程保持通讯时,如果,再在子窗体上建一个线程来定时读主窗体的数据(一个二维数组),怕不能很好地工作(线程之间的配合问题,我对线程不是很明白。目前只用了一个串口读数据的线程)。
怎么做才合适?
 
你可以写个线成的临界区让所有的操作同步执行,可以单元调用,就可以不同单元数据共想,如果不同的进程,可以进程发数据,或者作com 接口通信同步数据。
 
线程的临界区的工作我不懂。呵呵
 
呵呵 给一个 对我可行的建议呢?
 
-_-! 把你出错的那段代码贴出来看看
 
用取出数据后用消息通知各个窗体。
 
你不用这么麻烦,你把需要更新的信息放到全局队列里面,线程从这个队列获得更新信息,取到后就删除,不就可以了
 
TO hs-kill:
谢谢你。出错的代码:
Procedure TForm1.DrawQushitu(wendu:double);//监测数据转化为温度后做参数
var
Xjiange,Yjiange,zbX,zbY,zuobiaoX,zuobiaoY:integer; //X轴为时间,Y轴为温度
begin
Xjiange:=1; //时间/每像素,15分钟/60像素=1; //原:30分钟/60像素
Yjiange:=1; //温度/每像素,50/50=1
Form2.Image1.Canvas.Pen.Style:=PsInsideFrame;//??出错。提示说“写兄弟制错误”
Form2.Image1.Canvas.Pen.Width:=3; // 画到子窗体的image上
Form2.Image1.Canvas.Pen.Color:=clBlue;
zbX:=30;zbY:=350; //原点坐标
zuobiaoX:=zbX+Round(wendu*Xjiange);//以温度wendu做参数
zuobiaoY:=zbY-Round(wendu*Yjiange);
Form2.Image1.Canvas.MoveTo(zuobiaoX,zuobiaoY);
Form2.Image1.Canvas.LineTo(zuobiaoX,zuobiaoY);
end;
 
线程与可视控件的数据传递要用同步函数synchronization(里面放要同步的方法)
 
TO gmshello,:
我不懂synchronization啊。怎么办?
 
你去看一下关于线程介绍的书,同步的函数为synchronize(Method:TThreadMethod)
 
呵呵...怎么都说得那么痛苦似的呀?
直接在线程里发送消息.把数据发送给你要通知的窗体就行了..
 
后退
顶部