Mettez chaque téléchargement dans un fil séparé et gérez cette liste de téléchargements. Vous pouvez par exemple utiliser OmniThreadLibrary pour faciliter la programmation des threads. Vous pouvez également regarder mon unité de filetage au Cromis, ce qui est beaucoup plus simple mais cela peut suffire pour votre cas. C'est très facile à utiliser.
Si vous n'aimez pas les threads, vous pouvez également créer un exe qui prend les paramètres d'entrée au démarrage et télécharge le contenu vers un emplacement spécifié. Notez simplement que le téléchargement simultané de nombreux fichiers n'aidera probablement que si vous téléchargez à partir de différentes sources, sinon vous serez toujours limité par la bande passante de votre source unique et vous aurez également un overhead sur vous.
Voici un code avec mon unité de filetage et Indy pour HTTP, juste par exemple parce qu'il est facile à comprendre:
procedure TfMain.FormCreate(Sender: TObject);
var
Task: ITask;
begin
FTaskPool.DynamicSize := cbDynamicPoolSize.Checked;
FTaskPool.MinPoolSize := StrToInt(ePoolSize.Text);
FTaskPool.OnTaskMessage := OnTaskMessage;
FTaskPool.Initialize;
for I := 1 to NumberOfDownloads do
begin
Task := FTaskPool.AcquireTask(OnTaskExecute, 'HTTPDownload');
Task.Values.Ensure('TargeFile').AsString := aFileName;
Task.Values.Ensure('URL').AsString := aDownloadURL;
Task.Run;
end;
end;
procedure TfMain.OnTaskExecute(const Task: ITask);
var
HTTPClient: TIdHTTP;
FileStream: TFileStream;
begin
HTTPClient := TIdHTTP.Create(nil);
try
FileStream := TFileStream.Create(Task.Values.Get('TargeFile').AsString, fmCreate);
try
HTTPClient.Get(Task.Values.Get('URL').AsInteger, FileStream);
Task.Message.Ensure('Result').AsString := 'Success';
Task.SendMessageAsync;
finally
FileStream.Free;
end;
finally
HTTPClient.Free;
end;
end;
procedure TfMain.OnTaskMessage(const Msg: ITaskValues);
begin
// do something when a single download has finished
end;
ce qui est excellent. Je vais vérifier OmniThreadLibrary. Merci pour l'aide! – kirkdmo
J'ai fini par utiliser votre bibliothèque Cromis et ça marche fantastique !! Merci beaucoup pour la contribution et pour la bibliothèque facile! – kirkdmo
@kdunlapmo, De rien, je suis heureux de pouvoir vous aider. – Runner