многопоток в delphi

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by justonline, 14 Nov 2011.

  1. justonline

    justonline network ninja

    Joined:
    27 Jul 2011
    Messages:
    499
    Likes Received:
    60
    Reputations:
    53
    Гуру кодинга, ай нид хелп...
    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    var
    s:string;
    id:integer;
    RegExp:TRegExpr;
    begin
    id:=1;
    while (id<10000) do begin
     RegExp := TRegExpr.Create;
     RegExp.InputString := IdHttp1.Get('http://site/index.html?user='+inttostr(id));
     RegExp.Expression := '<span class=cnavy style='#39'font: bold 12px Arial, Verdana'#39'>(.*?)</span>';
       if RegExp.Exec then
     repeat
       Memo1.Lines.Add(RegExp.Match[1]);
     until not RegExp.ExecNext;
     RegExp.Free;
     id:=id+1;
        end;
    end;
    мне надо, что бы это действие выполнялось в потоков 10.

    можете помочь?)
     
  2. justonline

    justonline network ninja

    Joined:
    27 Jul 2011
    Messages:
    499
    Likes Received:
    60
    Reputations:
    53
    все так сложно?
     
  3. 090808

    090808 Member

    Joined:
    15 Mar 2009
    Messages:
    171
    Likes Received:
    46
    Reputations:
    10
    В твоём случае это примерно так:

    PHP:
    unit Unit1;

    interface

    uses
      Windows
    MessagesSysUtilsVariantsClassesGraphicsControlsForms,
      
    Dialogs,idhttpStdCtrls,RegExpr;

    type
      TForm1 
    = class(TForm)
        
    Memo1TMemo;
        
    Button1TButton;
        
    procedure Button1Click(SenderTObject);
      private
        { Private 
    declarations }
      public
        { Public 
    declarations }
      
    end;

        
    Thread1 = class(TThread)
      private
      
    http:Tidhttp;
      
    id:integer;
      
    RegExp:TRegExpr;
      
    procedure getid;
        { Private 
    declarations }
      protected
        
    procedure Executeoverride;
      
    end;

    var
      
    Form1TForm1;
      
    idtemp:integer;
      
    Th:Thread1;
    implementation

    {$R *.dfm}

    Thread1 }

    procedure Thread1.Execute;
    begin
    http
    :=Tidhttp.Create(nil);http.HandleRedirects:=true;
    while (
    id<10000) do begin
    synchronize
    (getid);
    RegExp := TRegExpr.Create;
    try 
    RegExp.InputString := Http.Get('http://site/index.html?user='+inttostr(id)); except;end;
    RegExp.Expression := '<span class=cnavy style='#39'font: bold 12px Arial, Verdana'#39'>(.*?)</span>';
    if RegExp.Exec then
    repeat
    Form1
    .Memo1.Lines.Add(RegExp.Match[1]);
    until not RegExp.ExecNext;
    RegExp.Free;
    end;
    http.free;
    end;

    procedure TForm1.Button1Click(SenderTObject);  var i:integer;
    begin
    idtemp
    :=-1;
    for 
    i:=1 to 10 {10 количество потоков} do begin
    Th
    :=Thread1.Create(true);
    Th.FreeOnTerminate := True;
    Th.Priority := TPNormal;
    Th.Resume;
    end;
    end;

    procedure Thread1.getid;
    begin
    inc
    (idtemp);
    id:=idtemp;
    end;

    end.

     
    1 person likes this.