Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

потоки

-

Вопросы и ответы, обсуждения

- Ваши вопросы по Pascal/Delphi только в данном разделе

Ответ
 
Опции темы
Старый 27.05.2012, 21:01   #1
Заблокирован
 Разведчик
Аватар для victor20011
 
victor20011 на правильном пути
Регистрация: 17.05.2012
Сообщений: 18
Популярность: 66
Сказал(а) спасибо: 20
Поблагодарили 20 раз(а) в 11 сообщениях
Отправить сообщение для victor20011 с помощью ICQ Отправить сообщение для victor20011 с помощью Skype™
 
По умолчанию потоки

помогите пожалуйста
вот все потоки работают только есть проблеммы
1.например пишеш 1 поток он их делает 2
2.указываеш к примеру с 1 по 10 а он парсит до 50
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;//в разделе private описываются переменные с помощью которых мы
   nomer : Integer;//будем передавать значения между процедурами внутри потока
  protected
    procedure Execute; override;//это главная процедура потока, она начинает свою работу
//после того как мы создали поток
  public

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

  TForm1 = class(TForm)
    Memo1: TMemo;
    Button2: TButton;
    IdHTTP1: TIdHTTP;
    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.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  //цикл запускает 10 потоков, которые будут изменять заголовок
  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.
Добавлено через 4 часа 48 минут
не кто не знает?

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

Последний раз редактировалось victor20011; 28.05.2012 в 11:24. Причина: Добавлено сообщение
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Потоки. анашан Общение и обсуждение 1 26.09.2011 16:17
Потоки vkvova5 Вопросы и ответы, обсуждения 15 21.08.2011 02:16
[Помогите!] Потоки iVs.Dark Вопросы и ответы, обсуждения 1 05.08.2011 12:24
[Помогите!] Потоки с переменной zaparca Общение разработчиков 3 28.01.2011 14:17

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 17:14.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net