怎样让一个线程返回一个tstringlist类型的变量,或者说怎样在一个线程中使用另一个线程中的变量。

解决方案 »

  1.   

    还有tstringlist类型的释放问题怎样解决,最好能给个简单的例子。
      

  2.   

    建议你去看一下《delphi5开发人员指南》
      

  3.   

    给你个例子,自己看吧
    这是多线程同步的方法之一。 unit Main;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TMainForm = class(TForm)
        Button1: TButton;
        ListBox1: TListBox;
        procedure Button1Click(Sender: TObject);
      private
        procedure ThreadsDone(Sender: TObject);
      end;  TFooThread = class(TThread)
      protected
        procedure Execute; override;
      end;var
      MainForm: TMainForm;implementation{$R *.DFM}const
      MaxSize = 128;var
      NextNumber: Integer = 0;
      DoneFlags: Integer = 0;
      GlobalArray: array[1..MaxSize] of Integer;
      CS: TRTLCriticalSection;function GetNextNumber: Integer;
    begin
      Result := NextNumber;
      inc(NextNumber);      
    end;procedure TFooThread.Execute;
    var
      i: Integer;
    begin
      OnTerminate := MainForm.ThreadsDone;
      EnterCriticalSection(CS);           //进入临界区 
      for i := 1 to MaxSize do
      begin
        GlobalArray[i] := GetNextNumber;  //在这里操作公用变量就没问题。 
        Sleep(5);                         
      end;
      LeaveCriticalSection(CS);           //离开临界区
    end;procedure TMainForm.ThreadsDone(Sender: TObject);
    var
      i: Integer;
    begin
      inc(DoneFlags);
      if DoneFlags = 2 then
      begin 
        for i := 1 to MaxSize do
          Listbox1.Items.Add(IntToStr(GlobalArray[i]));
        DeleteCriticalSection(CS);
      end;
    end;procedure TMainForm.Button1Click(Sender: TObject);
    begin
      InitializeCriticalSection(CS);
      TFooThread.Create(False);  
      TFooThread.Create(False);
    end;end.