我想设计一个线程MYThread,在一个循环中调用!Para_ClientNo是线程的参数,根据这个参数的不同进行不同的操作!For i ;= 1 to 100 do
Begin
  MYThread.Create(Para_ClientNo);
End;为什么我做的线程在运行了一段时间后总是出现 ‘存储空间不足,线程无法创建’的错误!是因为线程没有没有在使用完及时释放掉的原因么?应该怎样在使用后做到及时释放?谢谢大家的帮助!

解决方案 »

  1.   

    在线程中设置 FreeOnTerminate := True;
      

  2.   

    楼主:本来应该写在那个贴子,可惜我后面写了3次没有别人跟贴不能再加了我觉得还是从时间中去掉线程的好,这也是我一个非常崇敬的大哥告诉我的。
    线程太多了,资源耗尽。那样做为什么 ?以下代码供参考 ,调试通过
    --------------------------------------------------------------------
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Timer1: TTimer;
        procedure Timer1Timer(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;type
      TMyThread = class(TThread)
      private  protected
        procedure Execute; override; 
      public    constructor Create; virtual; 
      end;
    var
      Form1 : TForm1;
      HSem : THandle = 0 ;
    implementation{$R *.dfm}procedure TMyThread.Execute;
    var
      WaitReturn : DWord ;
    begin
      WaitReturn := WaitForSingleObject(HSem,INFINITE) ;
      Form1.Edit1.Text := DateTimeToStr(Now);
      ReleaseSemaphore(HSem, 1, Nil) 
    end;constructor TMyThread.Create;
    begin
      inherited Create(False);
      FreeOnTerminate := True;
    end;
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      i: Integer;
    begin
      for i := 0 to 10 do //改小 ,100 时10多分钟后内存不足
      begin
        TMyThread.Create;
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      HSem := CreateSemaphore(Nil,10,10,Nil) ;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      CloseHandle(HSem) ;
    end;end.
      

  3.   

    http://expert.csdn.net/Expert/topic/1277/1277886.xml?temp=.9009668就是它,后面再写不上去了