如何动态增加 运行 线程的数量并使用列表等待它们?

How to increment the number of running threads dynamically and wait for them using a list?

我想创建一个线程列表并在每个时间间隔(取决于某些条件)更改 运行 线程的数量,使用 array of THandle 是不可能的,因为 - 如您所知- 这里我需要在创建线程之前修复数组的长度,这就是我的处理方式:

procedure MainThread.execute;
var 
  HandleThread : THandle;
  ListOfThreadsH : TList;
begin
  ListOfThreadsH := TList.create;              
  while (condition) do
  begin
    HandleThread := TMyThread.Create( parameter1,..,parametern).Handle;
    ListOfThreadsH.add (HandleThread);
    ThreadCount := ThreadCount + 1;
  end;
  waitForMultipleObjects(ThreadCount, pointer(ListOfThreadsH), True, INFINITE);
end;

但是,我遇到了一些问题:

如果这不是增加 运行 线程数的正确方法,那么如何进行?感谢您的回复。

array of ...是动态的,你可以随时改变它的大小,例如:

procedure MainThread.execute;
var 
  ListOfThreads : TObjectList;
  ArrOfHandles : array of THandle;
  Thread : TMyThread;
begin
  ListOfThreads := TObjectList.Create(True);
  try
    while (condition) do
    begin
      Thread := TMyThread.Create(...);
      ListOfThreads.Add(Thread);
      SetLength(ArrOfHandles, Length(ArrOfHandles) + 1);
      ArrOfHandles[High(ArrOfHandles)] := Thread.Handle;
    end;
    WaitForMultipleObjects(Length(ArrOfHandles), PWOHandleArray(Pointer(ArrOfHandles)), True, INFINITE);
  finally
    ListOfThreads.Free;
  end;
end;

或者:

procedure MainThread.execute;
var 
  ListOfThreads : TObjectList;
  ListOfHandles : TList<THandle>;
  Thread : TMyThread;
begin
  ListOfThreads := TObjectList.Create(True);
  try
    ListOfHandles := TList<THandle>.Create;
    try
      while (condition) do
      begin
        Thread := TMyThread.Create(...);
        ListOfThreads.Add(Thread);
        ListOfHandles.Add(Thread.Handle);
      end;
      WaitForMultipleObjects(ListOfHandles.Count, PWOHandleArray(Pointer(ListOfHandles.ToArray)), True, INFINITE);
    finally
      ListOfHandles.Free;
    end;
  finally
    ListOfThreads.Free;
  end;
end;