一组线程数组结束后返回一个消息,不知道该如何写请指教//线程部分////////////////
type
  TLoadOLMails = class (TThread)
  private
    FThread_ID      : Integer;
    FMaxThreadCount : Integer;
  protected
    procedure Execute; override;
  public
    constructor create(const AThreadID,AMaxThreadCount:Integer);
  end;
implementationconstructor TLoadOLMails.create(const AThreadID,AMaxThreadCount:Integer);
begin
 FThread_ID      := AThreadID;
 FMaxThreadCount := AMaxThreadCount;
 inherited Create(False);
end;procedure TLoadOLMails.Execute;
var
 I : Integer;
begin
  Priority        := tpLower;
  FreeOnTerminate := True;
  //一段处理过程
  for I := $FFFFFF downto 1 do
      if (I mod FMaxThreadCount)=(FMaxThreadCount-FThread_ID) then begin
          //……………………
          //处理过程
          //……………………
      end;
end;//////////////////////////////////////
//主程序中的调用过程
var
i           : integer;
LoadOLMails : array of TLoadOLMails;  //这个是全局变量
begin
SetLength(LoadOLMails,4); //定义4个线程
for i:=Low(LoadOLMails) to High(LoadOLMails) do begin //建立4个线程对象
  LoadOLMails[i]:=TLoadOLMails.create(i+1,Length(LoadOLMails));
end;
/////////////////////////////////////
主线程通过什么能够知道这4个线程分别处理完各自的任务,请提供完整代码,谢谢

解决方案 »

  1.   

    用等待事件API,复杂还带条件选择的话,在 windows 核心编程中
    有一个不错的例子。
      

  2.   

    定义主线程中定义四个Tevent对象
    然后每一个对应一个线程,构造线程以后,主程序直接
    for i:=0 to 3 do 
     event[i].waitfor(INFINAL);
    线程中执行完毕以后event.setevent;就返回给主线程乐,但是这样有个问题,朱线程会挂死,所以你应该在主线程里面再添加一个定义的命令线程,防止主线程因为waitsingleobject而看起来死机的样子,具体思路就这些,你可以尝试一下。还有,如果是针对单个线程的返回,最简单的就是主线程中运行线程以后,直接调用线程的waitfor函数来等待他的执行完毕。