PDA

Просмотр полной версии : [Помогите!] потоки


victor20011
27.05.2012, 21:01
помогите пожалуйста
вот все потоки работают только есть проблеммы
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, Id[Ссылки могут видеть только зарегистрированные и активированные пользователи]
StdCtrls, sSkinManager, sLabel, IdAntiFreezeBase, IdAntiFreeze, Spin;

type

potok = class(TThread) //Этой строкой мы унаследовали класс потока
private
str: string;//в разделе private описываются переменные с помощью которых мы
nomer : Integer;//будем передавать значения между процедурами внутри потока
protected
procedure Execute; override;//это главная процедура потока, она начинает свою работу
//после того как мы создали поток
public

procedure synchro;//в разделе public вы можете объявить процедуры какие только душе
//угодно
constructor Create(CreateSuspended: Boolean);//эта строка говорит о том, что мы в
//implementation опишем конструкцию
//потока
end;

TForm1 = class(TForm)
Memo1: TMemo;
Button2: TButton;
Id[Ссылки могут видеть только зарегистрированные и активированные пользователи] TId[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
SaveDialog1: TSaveDialog;
Button1: TButton;
sSkinManager1: TsSkinManager;
Button3: TButton;
sLabelFX1: TsLabelFX;
Label5: TLabel;
SpinEdit1: TSpinEdit;
procedure Button2Click(Sender: TObject);
procedure Memo1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);

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);//Эта строка говорит о том, что поток после создания
//будет приостановлен если ему передать значение true при создание, если false, то сразу
//начнёт работу.
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);//этой строкой мы вызываем процедуру synchro в единичном экземпляре
end;
end;


procedure potok.synchro; //описываем ещё одну процедуру потока, которая будет менять
//загаловок form1
var
s:string;
begin
inc(i);
Str:=form1.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 //цикл запускает 10 потоков, которые будут изменять заголовок
a[pot]:=potok.Create(false); //формы, так же идёт
//добавление в массив, что бы потом вы могли уничтожить
//один поток.
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
id[Ссылки могут видеть только зарегистрированные и активированные пользователи]
end;

procedure TForm1.Memo1Change(Sender: TObject);
begin
label3.Caption:='Ссылок получено '+inttostr(memo1.Lines.Count);
end;

{ Potok }


end.

Добавлено через 4 часа 48 минут
не кто не знает?

Добавлено через 14 часов 22 минуты
ап