S
soFTangeL
Unregistered / Unconfirmed
GUEST, unregistred user!
假设我现在有1000个文件(001.txt,002.txt,...)需要一定数量的(比如10个)线程来访问。下面是我创建一定数量线程的代码:
procedure TMainForm.Button1Click(Sender: TObject);
var
FileName:string;
i: integer;
ThreadList: array of TmyThread;
begin
SetLength(ThreadList, strtoint(Txt_ThreadCount.Text));
//Txt_ThreadCount.Text表示创建的线程数量
for i := 0 to length(ThreadList) - 1do
begin
ThreadList := TmyThread.Create(False,FileName);//FileName 为要访问的文件名
ThreadList.OnTerminate := ThreadOver;
end;
end;
如果 FileName 为固定的一个,那当然没多大问题。现在关键是我有很多的文件需要访问。因此现在的问题主要有两个:
一个是如何把这些文件平均分配给指定的线程让他们同时访问?预先分配任务,把文件数除以线程数?比如:1000/10=100,那就每个线程分配100个?那这个怎么实现呢?
第二个就是最好能像Flashget那样,在一个线程完成时,如果发现其他线程还没有完成任务,可以“帮帮忙”,从其他线程的剩余任务里面领取一些文件列表来自己处理。不过这样似乎又不能完全采用上面的“预先分配任务,把文件数除以线程数”了。诚判各位大侠出谋划策。
先谢谢了!
procedure TMainForm.Button1Click(Sender: TObject);
var
FileName:string;
i: integer;
ThreadList: array of TmyThread;
begin
SetLength(ThreadList, strtoint(Txt_ThreadCount.Text));
//Txt_ThreadCount.Text表示创建的线程数量
for i := 0 to length(ThreadList) - 1do
begin
ThreadList := TmyThread.Create(False,FileName);//FileName 为要访问的文件名
ThreadList.OnTerminate := ThreadOver;
end;
end;
如果 FileName 为固定的一个,那当然没多大问题。现在关键是我有很多的文件需要访问。因此现在的问题主要有两个:
一个是如何把这些文件平均分配给指定的线程让他们同时访问?预先分配任务,把文件数除以线程数?比如:1000/10=100,那就每个线程分配100个?那这个怎么实现呢?
第二个就是最好能像Flashget那样,在一个线程完成时,如果发现其他线程还没有完成任务,可以“帮帮忙”,从其他线程的剩余任务里面领取一些文件列表来自己处理。不过这样似乎又不能完全采用上面的“预先分配任务,把文件数除以线程数”了。诚判各位大侠出谋划策。
先谢谢了!