请教,如何动态创建多个线程呢???????
及线程的管理

解决方案 »

  1.   

    unit Unit2;interfaceusesWindows, Classes;typeTDemoThread = class(TThread)private{ Private declarations }FEvent: THandle;FTimeout: DWORD;protectedprocedure Execute; override;procedure Action; virtual;publicConstructor Create(CreateSuspended: Boolean;
    aTimeoutInSeconds:Cardinal );Destructor Destroy; override;Procedure WakeAndStop;end;implementation { TDemoThread }procedure TDemoThread.Action;begin// place code to execute after timeout hereend;constructor TDemoThread.Create(CreateSuspended: Boolean;aTimeoutInSeconds: Cardinal);beginFTimeout := aTimeoutInSeconds * 1000; // store as millisecondsFEvent := Windows.CreateEvent( nil, false, false, nil );///在这里可以把FEvent替换成你自己需要的东西// event resets automatically and starts non-signalledinherited Create( CreateSuspended );end;destructor TDemoThread.Destroy;beginTerminate;SetEvent( FEvent );inherited;end;procedure TDemoThread.Execute;Varres: DWORD;beginWhile not Terminated Do Beginres := WaitForSingleObject( Fevent, FTimeout );If res = WAIT_TIMEOUT ThenActionElseBreak;End;end;procedure TDemoThread.WakeAndStop;beginSetEvent( FEvent );end;end.---------------------------------------
      

  2.   

    用TList,或TStrings来管理,
    加载线程的OnTermiated事件procedure TForm1.AddThread(Name: string = '');
    var
      Thread: TMyThread;
      ThreadName: string;
    begin
      if Name = '' then
        ThreadName := IntToStr(FList.Count + 1);
      Thread := TMyThread.Create(...);
      Thread.OnTermated := OnThreadTermiated;
      FList.AddObject(ThreadName, Thread);
    end;//Thread 's OnTermiated Event
    procedure TForm1.OnThreadTermiated(Sender: TObject);
    var
      Index: Integer;
    begin
      Index := FList.IndexOfObject(Sender);
      if Index <> -1 then  
      begin
        //TODO: Add you code
        ShowMessage('第'+Flist[I]+'死了');
        FList.Delete(Index);   
      end;
    end;
      

  3.   

    谁的线程是静态创建的?不都是动态的嘛用一个TList存储每个线程对象的指针,就可以很方便管理了关于他们的同步管理,你可以给他们传递相同的临界区变量