最近写个小软件,需要在线程内获取json数据,然后将json内的一个items获取出来,存放到数组内,然后再将数组的数据发送到窗体,然后显示出来。
一开始使用的是老方法,创建动态数组,设置长度,然后装载数组数据,使用Sendmessage函数发送,Wparam是Integer(@Array[0])
在窗体,使用了Integer(Array)来接收数组指针,然后读取内容。
但是随后诡异的事情就接二连三出现,不断地报内存错误!!
这让我十分的蛋疼,检查了许久不知道哪里出错,于是我开始怀疑是SendMessage函数的问题。
果然注释掉几个相关代码后,不报错了。
那么,就需要换一个思路来做了。
首先,在窗体上创建动态数组,设置好长度。
然后将动态数组赋值给线程。因为动态数组的赋值其实是指针地址的赋值,也就是类似于对象的引用,所以赋值后两个变量是指向的同一个数组。由于窗体内的数组是全局变量,所以不用担心指针读取错误。
然后在线程内部解析获取到的json,赋值给动态数组,然后向窗体PostMessage一个消息,通知窗体开始接收处理动态数组的数据。
这样一来就不会出现那些指针错误了。
剩余的对于线程和窗体的操作同步,用临界资源、信号量等技术即可实现
文章评论