多线程下载字符串delphi

ALD-52

功能

function DownloadString(AUrl: string): string;
var
  LHttp: TIdHttp;
begin
  LHttp := TIdHTTP.Create;
  try
    LHttp.HandleRedirects := true;
    result := LHttp.Get('http://127.0.0.1/a.php?n='+AUrl);
  finally
    LHttp.Free;
  end;
end;

开机

procedure TForm1.Button1Click(Sender: TObject);
var
  LUrlArray: TArray<String>;
begin
  LUrlArray := form1.listbox1.Items.ToStringArray;
  TThread.CreateAnonymousThread(
    procedure
    var
      LResult: string;
      LUrl: string;
    begin
      for LUrl in LUrlArray do
      begin
        LResult := DownloadString(LUrl);
        TThread.Synchronize(nil,
        procedure
        begin
          if Pos('DENEGADA',LResult)>0 then
          begin
            Memo1.Lines.Add(LResult);
          end
          else
          begin
            Memo1.Lines.Add(LResult + 'DIE');
          end;
        end
        );
      end;
    end
  ).Start;
end;

列表框行

http://127.0.0.1/a.php?n=4984
http://127.0.0.1/a.php?n=4986
http://127.0.0.1/a.php?n=4989

在这种情况下,只有一个线程会下载所有URL的内容,但我想让它为每个项目创建一个线程...

例子:

thread1 - check item1 listbox - http://127.0.0.1/a.php?n=4984
thread2 - check next item 4986
thread3 - check next item 4989

如何做到这一点?有什么方法可以做到吗?,我相信这种方法会更有效。

鲁道德

为了创建单独的线程,您必须像这样绑定url变量值:

procedure TForm1.Button1Click(Sender: TObject);
var
  LUrlArray: TArray<String>;
  LUrl: String;

function CaptureThreadTask(const s: String) : TProc;
begin
  Result := 
    procedure
    var 
      LResult : String;
    begin
      LResult := DownloadString(s);
      TThread.Synchronize(nil,
        procedure
        begin
          if Pos('DENEGADA',LResult)>0 then
          begin
            Memo1.Lines.Add(LResult);
          end
          else
          begin
            Memo1.Lines.Add(LResult + 'DIE');
          end;
        end
        );
    end;
end;

begin
  LUrlArray := form1.listbox1.Items.ToStringArray;
  for LUrl in LUrlArray do
    // Bind variable LUrl value like this
    TThread.CreateAnonymousThread( CaptureThreadTask(LUrl)
    ).Start;
end;

请参阅匿名方法变量绑定

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

多线程字符串处理

来自分类Dev

多线程,锁定和字符串值列表

来自分类Dev

在C中使用字符串进行多线程

来自分类Dev

#threads破坏了多线程的字符串处理

来自分类Dev

打印字符串多线程列表

来自分类Dev

javascript web workers 多线程字符串搜索比单线程慢?

来自分类Dev

字符串流和多线程

来自分类Dev

通过'%'进行python字符串操作的多线程安全性

来自分类Dev

从C ++ => C包装的API传输错误字符串(多线程)

来自分类Dev

在 Java 中,在多线程情况下更改/读取字符串

来自分类Dev

如何在多线程环境中搜索特定的字符串表单列表。?

来自分类Dev

简单的多线程Delphi

来自分类Dev

简单的多线程Delphi

来自分类Dev

Javascript下载字符串

来自分类Dev

从线程返回“字符串”

来自分类Dev

多线程HTTP下载器

来自分类Dev

关于多线程下载的缺点

来自分类Dev

多线程HTTP下载器

来自分类Dev

WebClient无法下载字符串

来自分类Dev

从字符串创建文件并下载

来自分类Dev

带字符串参数的Delphi过程

来自分类Dev

Delphi-遍历字符串

来自分类Dev

字符串数组线程安全吗?

来自分类Dev

更改线程中的字符串

来自分类Dev

跨多个线程访问字符串

来自分类Dev

线程携带重复的字符串对象

来自分类Dev

线程同步打印字符串

来自分类Dev

Tkinter问线程内的字符串

来自分类Dev

如何从线程修改字符串?