aLoNe.Adams.K

独孤圣人的技术小站

在Delphi下,使用线程向窗体发送动态数组数据的解决方法~

最近写个小软件,需要在线程内获取json数据,然后将json内的一个items获取出来,存放到数组内,然后再将数组的数据发送到窗体,然后显示出来。

一开始使用的是老方法,创建动态数组,设置长度,然后装载数组数据,使用Sendmessage函数发送,Wparam是Integer(@Array[0])

在窗体,使用了Integer(Array)来接收数组指针,然后读取内容。

但是随后诡异的事情就接二连三出现,不断地报内存错误!!

这让我十分的蛋疼,检查了许久不知道哪里出错,于是我开始怀疑是SendMessage函数的问题。

果然注释掉几个相关代码后,不报错了。

那么,就需要换一个思路来做了。

首先,在窗体上创建动态数组,设置好长度。

然后将动态数组赋值给线程。因为动态数组的赋值其实是指针地址的赋值,也就是类似于对象的引用,所以赋值后两个变量是指向的同一个数组。由于窗体内的数组是全局变量,所以不用担心指针读取错误。

然后在线程内部解析获取到的json,赋值给动态数组,然后向窗体PostMessage一个消息,通知窗体开始接收处理动态数组的数据。

这样一来就不会出现那些指针错误了。

剩余的对于线程和窗体的操作同步,用临界资源、信号量等技术即可实现

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注