***** 不使用多线程时,使用了第归函数 *****
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;
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;
解决方案 »
- 急!在线等,delphi操作excel 如何在页面设置里面设“缩放比例”为70%
- Delphi FTP编程时遇到10054 Connection reset by peer错误,请教解决方法!
- 如何得到一个sql的update 语句所影响的记录数
- 请各位帮帮我啊 delphi 中如何设置EXCEL单元格的属性阿?比如改为数值型!
- 在运行期怎么知道弹出式菜单是在哪个控件上弹出的?急!!!
- 小才鸟问题,maskedit的,不是问掩码格式的。求教。
- 页合计!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 求助:为何数组超标也不会出错?!
- 有关系统托盘的问题,请高手指点
- 在把焦点置于maskedit中时,怎样可以把焦点定位于maskedit的某一位置啊~~急
- 生成的EXE文件到没有DELPHI环境的机器上不能运行?
- 点击Table1的Tablename属性是出现要求输入密码???
每个线程都需要一个参数URL:string,而只给了一个起始URL,每一个线程执行时获得若干个URL,这些URL应用到三个线程第一个线程获得起始URL,执行时获得若干个URL,若其他两个线程正在执行,重复处理这些URL。若其他两个线程有已经执行完毕(或没有创建),那么再重新创建
给你一点建议:
在主程序里写一个发号函数,每个线程回调这个函数,取得“号”,再下载。
发号的时候要注意同步问题。给你一个简单的例子
function GetNextID: Integer; //FID为一个全局变量
begin
FCS.Acquire; //保护临界资源
try
Result := Windows.InterlockedIncrement(FID);//InterlockedIncrement为同步自增
finally
FCS.Release;
end;
end;