子线程不能共享使用主线程的动态数组变量吗?
子线程不能共享使用主线程的动态数组变量吗?
在主线程定义了动态数组变量
如下所示:
Type
TArrayType: array of string;
主窗体中
A1:TArrayType;
子线程:
A1:TArrayType;
setlength(A1,length(A1)+1);
A1[0]:='aaaa';
主窗口调用子线程
var
s: string;
DataThread: TClientDataThread;
begin
// create thread
DataThread:= TClientDataThread.Create(true);
DataThread.A1:=A1;
DataThread.resume;
子线程执行后,发现主窗体中的动态数组变量长度还是0,如何共享呢?
[解决办法]
取消定义子线程里的a1。记得存取a1时要加锁,无论是主线程还是子线程。
[解决办法]
A1放到一个公用单元里面,并在这个公用单元里给出加解锁的方法。
[解决办法]
子线程直接加锁访问主线程变量