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

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


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


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


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


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


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


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


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


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


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


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


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值