Только начал разбираться с потоками,нашел примерчик ,изменил чуть под себя и вот что получилось: Программа скачивает в 3 потоках странички через Idhttp,но как я понял она их скачивает не паралельно а последовательно. мне нужно написать программу каторая будет распозновать 20 капч одновременно в 20 потоках. тоесть: 1) Скачиваю странику,получаю капчу,пока идет распознование(занимает 15 сек) скачиваю другую страничку и так далее... После того как на всех потоках скачались странички и капча распознана к ним мы должны пройтись по ним ,собрать с каждого потока уже распознанную капчу и закрыть поток. что нужно поправить и как вообще это делается подскажите плиз Code: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, XPMan, ComCtrls,idhttp; type TForm1 = class(TForm) Button2: TButton; Button4: TButton; procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; type TMyPotok = class(TThread) private { Private declarations } protected procedure execute; override; end; Const MaxPotoks = 6; var Form1: TForm1; MyPotokX: Array [0..10] of TMyPotok; myidHTTP :Array [0..10] of TidHTTP; myOtvet:Array [0..10] of TStringList; I_potok: Integer; implementation {$R *.dfm} Procedure TMyPotok.execute; VAR i: Integer; begin MessageBox(0,'сыр сыр сыр!!!', nil, 0); myOtvet[I_potok].Text:=myidHTTP[I_potok].Get('http://ya.ru/'); //getCapcha; // тут будет функцию распозновании капчи (распознает 10 секунд) myOtvet[I_potok].SaveToFile(inttostr(random(999))+'.html'); Application.ProcessMessages; End; procedure TForm1.Button2Click(Sender: TObject); VAR i: integer; I_potok:integer; begin for I_potok:=0 to 2 do begin myidHTTP[I_potok] := TidHTTP.Create(nil); myOtvet[I_potok]:= TStringList.Create; MyPotokX[I_potok]:= TMyPotok.create(true); MyPotokX[I_potok].FreeOnTerminate:= True; MyPotokX[I_potok].Priority:= tpLowest; end; try For i:=0 to 2 do MyPotokX[i].Resume; except exit; end; end; procedure TForm1.FormCreate(Sender: TObject); begin I_potok:=0; end; procedure TForm1.Button4Click(Sender: TObject); begin I_potok:= 0; end; end.
при нажатии на кнопку создаеться столько потоков сколько существует записей в memo1 допустим я создал 50 потоков. 1)как мне остановить вручнудю все эти 50 потоков и удалить их? 2)чтобы потоки удалились нужно в конце писать self.Terminate; self.free; ? или он сам удаляеться 3)как остановить например только 10-ый поток? подскажите пожалуйса. Code: procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin for i := 0 to Memo1.Lines.Count - 1 do begin TMyThread.Create(false, Memo1.lines[i]); end; end; Code: type TMyThread = class(TThread) private FUrl: string; public constructor Create(CreateSuspended: Boolean; AUrl: string); protected procedure Execute; override; procedure UpdateCaption; end; implementation uses Unit1; constructor TMyThread.Create(CreateSuspended: Boolean; AUrl: string); begin inherited Create(CreateSuspended); FUrl := AUrl; FreeOnTerminate := true; end; procedure TMyThread.Execute; var http: TIdHTTP; str: TStringList; begin str := TStringList.Create(); http := TIdHTTP.Create(nil); str.Text:= http.Get(FUrl); sleep(7000); str.SaveToFile(inttostr(random(222))+'.html'); http.Free; str.free ; Synchronize(UpdateCaption); // self.Terminate; //self.free; end; procedure TMyThread.UpdateCaption; begin Form1.Memo2.Lines.Add(FUrl); end;