|
#1
|
|||
|
|||
потоки :confused:
помогите пожалуйста
вот все потоки работают только есть проблеммы 1.например пишеш 1 поток он их делает 2 2.указываеш к примеру с 1 по 10 а он парсит до 50:shock: 3.зависает программа до окончания процесса что делать?( Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent,regexpr, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, StdCtrls, sSkinManager, sLabel, IdAntiFreezeBase, IdAntiFreeze, Spin; type potok = class(TThread) private str: string; nomer : Integer; protected procedure Execute; override; public procedure synchro; constructor Create(CreateSuspended: Boolean); end; private { Private declarations } public { Public declarations } end; var Form1: TForm1; Str:string; i:integer; reg:tregexpr; a: array [1..10] of potok; implementation constructor potok.Create(CreateSuspended: Boolean); begin inherited Create(CreateSuspended); end; procedure potok.Execute; var i:integer; begin for I := strtoint(form1.Edit1.text) to strtoint(form1.edit2.text) do begin sleep(1000); synchronize(synchro); end; end; procedure potok.synchro var s:string; begin inc(i); Str:=form1.idhttp1.Get('http://......../tipper/reporting/lboard.php?&lang=&session_id='+inttostr(i)); form1.label4.caption:='Страница '+Inttostr(i)+' из '+form1.edit2.text; begin reg:=TRegExpr.create; begin Reg.expression:='text-align:left;(.*?)</td><td class='; if reg.exec(str) then repeat s:=Copy(reg.match[1],0,Length(reg.match[1])); s:=s; form1.memo1.lines.Add(s); until not Reg.ExecNext; end; end; end; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if savedialog1.Execute then memo1.Lines.SaveToFile(savedialog1.FileName+'.txt'); end; procedure TForm1.Button2Click(Sender: TObject); var pot:integer; begin if edit2.Text<edit1.text then begin showmessage('Конечный индекс должен быть больше начального') end else begin memo1.clear; for pot:=1 to spinedit1.Value do a[pot]:=potok.Create(false); end; end; procedure TForm1.Button3Click(Sender: TObject); begin idhttp1.Free; end; procedure TForm1.Memo1Change(Sender: TObject); begin label3.Caption:='Ссылок получено '+inttostr(memo1.Lines.Count); end; { Potok } end. |