子线程不能共享使用主线程的动态数组变量吗?    在主线程定义了动态数组变量
如下所示: 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,如何共享呢?

解决方案 »

  1.   

    取消定义子线程里的a1。记得存取a1时要加锁,无论是主线程还是子线程。
      

  2.   

    发现:
      动态数组在同一线程赋值时,是把地址赋值,而在不同线程赋值时,就是重新复制了整个数据,从而有利两个不相关的动态数组  看来只能传指针了。发现指针还是可以保持同一变量
      

  3.   

    取消定义子线程里的a1
    ---------
      不定义怎么赋值呢? 要不就要把主窗体名传递个子线程来
      

  4.   

    A1放到一个公用单元里面,并在这个公用单元里给出加解锁的方法。
      

  5.   

    子线程直接加锁访问主线程变量