我在一个线程对象中声明了一个全局变量 i :Integer,但是在线程函数中改变它的值,可是再次取其值时,它的值就会变成0
请问有没有人遇到过这样的问题呀。要怎么办才能保证它的值不变成0.

解决方案 »

  1.   

    如下试试:type
      TMyThread = class(TThread)
      private
        NewValue: Integer;
        procedure SetValue;
      protected
        procedure Execute;
      end;implementationvar
      i: Integer;{ TMyThread }procedure TMyThread.Execute;
    begin
      NewValue := 10;
      Synchronize(SetValue);
    end;procedure TMyThread.SetValue;
    begin
      i := NewValue;
    end;
      

  2.   

    i是全局变量,不会的。加Synchronize中是表示在更i的时候,即使有多个线程更新i的时候,也"必须排队一个个来",不能一窝蜂的都去更新i