多线程问题,急急

LuckyJan 2006-03-22 03:58:10
***** 不使用多线程时,使用了第归函数 *****
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;
...全文
184 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
godlord911 2006-06-04
  • 打赏
  • 举报
回复
你的意思好像是用多线程来下载页面。
给你一点建议:
在主程序里写一个发号函数,每个线程回调这个函数,取得“号”,再下载。
发号的时候要注意同步问题。给你一个简单的例子
function GetNextID: Integer; //FID为一个全局变量
begin
FCS.Acquire; //保护临界资源
try
Result := Windows.InterlockedIncrement(FID);//InterlockedIncrement为同步自增
finally
FCS.Release;
end;
end;
gb123456 2006-06-02
  • 打赏
  • 举报
回复
多线程很容易出问题,而且不好调试,可以使用线程,注意"线程同步"不然死订了
jianjian7510 2006-05-31
  • 打赏
  • 举报
回复
我有类似示例,把Email留在我留言箱中
jianjian7510 2006-05-31
  • 打赏
  • 举报
回复
我有查找设置句并的示例,把Email留在我留言箱中
cdsun 2006-05-31
  • 打赏
  • 举报
回复
我没有尝试过不知道
帮顶
LuckyJan 2006-04-18
  • 打赏
  • 举报
回复
我的意思是:假如需要三个线程同时执行
每个线程都需要一个参数URL:string,而只给了一个起始URL,每一个线程执行时获得若干个URL,这些URL应用到三个线程

第一个线程获得起始URL,执行时获得若干个URL,若其他两个线程正在执行,重复处理这些URL。若其他两个线程有已经执行完毕(或没有创建),那么再重新创建
ZyxIp 2006-03-22
  • 打赏
  • 举报
回复
你想要做什么?多个线程并不能提高速度,可以将整个循环放在一个线程就可以了.

多个线程时要注意同步的问题.

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧