***** 不使用多线程时,使用了第归函数 *****
procedure myFoo(s:string);
var myArray:array of string;
begin
  ... 处理功能....
  
  setLength(myArray,n); //根据条件取得数组  for i:=0 to high(myArray) do begin
    myFoo(myArray[i]);  //第归
  end;
end;***********************  多线程 **********************
我想把上面的函数功能应用到多线程中,需要最多3个线程运行,
该怎么做?
procedure TmyThread.ThreadsDone(Sender: TObject);
begin
  Dec(frmMain.iFlag);
  if frmMain.iFlag=0 then ....
end;procedure TmyThread.Execute;
begin
  inc(frmMain.iFlag);
  myFoo(sStart);
end;procedure TmyThread.myFoo(s:string);
var myArray:array of string;
begin
  ... 处理功能....
  
  setLength(myArray,n); //根据条件取得数组  for i:=0 to high(myArray) do begin
    myFoo(myArray[i]);  //第归           //???? 这里可以创建线程吗?
  end;
end;

解决方案 »

  1.   

    我的意思是:假如需要三个线程同时执行
    每个线程都需要一个参数URL:string,而只给了一个起始URL,每一个线程执行时获得若干个URL,这些URL应用到三个线程第一个线程获得起始URL,执行时获得若干个URL,若其他两个线程正在执行,重复处理这些URL。若其他两个线程有已经执行完毕(或没有创建),那么再重新创建
      

  2.   

    我有查找设置句并的示例,把Email留在我留言箱中
      

  3.   

    我有类似示例,把Email留在我留言箱中
      

  4.   

    你的意思好像是用多线程来下载页面。
    给你一点建议:
    在主程序里写一个发号函数,每个线程回调这个函数,取得“号”,再下载。
    发号的时候要注意同步问题。给你一个简单的例子
    function GetNextID: Integer;  //FID为一个全局变量
    begin
        FCS.Acquire;  //保护临界资源
        try
            Result := Windows.InterlockedIncrement(FID);//InterlockedIncrement为同步自增
        finally
            FCS.Release;
        end;
    end;