Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 02.03.2014, 22:26   #1
UKRtortik
Форумчанин
 
Регистрация: 25.02.2014
Сообщений: 366
По умолчанию Поиск ошибки

Хочу добавить многопоточности, но что-то не получается...
Код:
type TPotok=class(TThread)
  private
  html:WideString;
  procedure reg;
  protected
   procedure Execute;override;
end;

procedure TPotok.reg;
begin
Form1.sMemo2.Lines.Add(rege.Match[0]);
end;

procedure TPotok.Execute;
begin
for i:=0 to Form1.sMemo1.Lines.Count-1 do
begin
try
site:=Form1.sMemo1.Lines.Strings[i];
html:=HTTP.Get(site);
except
end;
if rege.Exec(html) then
repeat Synchronize(reg);
until (not rege.ExecNext) or Potok.Terminated;
if Potok.Terminated then break;
end;
HTTP.Free;
Rege.Free;
end;

procedure TForm1.sButton3Click(Sender: TObject);
begin
FProgramTimeStart := Now;
HTTP:=TIdHTTP.Create(nil);
rege:=TRegExpr.Create;
rege.Expression:='\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}';
TPotok.Create(false);
for thread:=0 to sSpinEdit1.Value do begin
end;
end;
UKRtortik вне форума
Старый 02.03.2014, 22:57   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
Код:
for i:=0 to Form1.sMemo1.Lines.Count-1 do
..
site:=Form1.sMemo1.Lines.Strings[i];
Все потоки будут делать одно и то же?
работа с VCL (визуальные компоненты form1, memo1) без синхронизации(syncronize)

Код:
html:=HTTP.Get(site);
...
if rege.Exec(html) then
Использование глобального объекта (HTTP, rege) без синхронизации.

поток ничего не должен знать о внешнем для него мире (form1, http, rege)
все что ему понадобится должен рассказать (задать в параметрах!) его создатель (в твоем случае form1)

Код:
Код:
for j:=0 to spinn.value do begin
  r:=Tpotok.create(true); //создали остановленный
  r.site:=form1.memo1.lines[j];//указали с чем о будет работать
  r.regex:='\d....';
  r.Start;//запустили
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 02.03.2014 в 23:09.
evg_m вне форума
Старый 02.03.2014, 22:58   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
HTTP:=TIdHTTP.Create(nil);
rege:=TRegExpr.Create;
rege.Expression:='\d{1,3}\.\d{1,3}\ .\d{1,3}\.\d{1,3}:\d{1,5}';
Внутрь потока вноси это. И создания и удаления этих переменных - все туда.
И кстати стоит писать так:
Код:
p:=TPotok.Create(true);
with p do begin
 FreeOnTerminate:=true;
 Start;
end;
Где р - глобальная переменная.
I'm learning to live...
Stilet вне форума
Старый 02.03.2014, 23:07   #4
UKRtortik
Форумчанин
 
Регистрация: 25.02.2014
Сообщений: 366
По умолчанию

Цитата:
warning W1019: W1019 For loop control variable must be simple local variable
warning W1019: W1019 For loop control variable must be simple local variable
warning W1000: W1000 Symbol 'Suspend' is deprecated
error E2010: E2010 Incompatible types: 'string' and 'TPotok'
error E2018: E2018 Record, object or class type required
error E2003: E2003 Undeclared identifier: 'FreeOnTerminate'
error E2003: E2003 Undeclared identifier: 'Start'
error F2063: F2063 Could not compile used unit 'Unit1.pas'
Код:
procedure TPotok.reg;
begin
Form1.sMemo2.Lines.Add(rege.Match[0]);
end;

procedure TPotok.Execute;
begin
for i:=0 to Form1.sMemo1.Lines.Count-1 do
begin
HTTP:=TIdHTTP.Create(nil);
rege:=TRegExpr.Create;
rege.Expression:='\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}';
try
site:=Form1.sMemo1.Lines.Strings[i];
html:=HTTP.Get(site);
except
end;
if rege.Exec(html) then
repeat Synchronize(reg);
until (not rege.ExecNext) or Potok.Terminated;
if Potok.Terminated then break;
end;
HTTP.Free;
Rege.Free;
end;

procedure TForm1.sButton3Click(Sender: TObject);
begin
for thread:=0 to sSpinEdit1.Value do begin
p:=TPotok.Create(true);
with p do begin
FreeOnTerminate:=true;
Start;
end;
end;
end;
можно подробней обьяснить что не так? А то я не чего не понял из выше сказанного...

Последний раз редактировалось Stilet; 03.03.2014 в 09:07.
UKRtortik вне форума
Старый 03.03.2014, 09:09   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Incompatible types: 'string' and 'TPotok'
Дай угадаю: Переменная "p" у тебя описана как string?
I'm learning to live...
Stilet вне форума
Старый 03.03.2014, 13:11   #6
UKRtortik
Форумчанин
 
Регистрация: 25.02.2014
Сообщений: 366
По умолчанию

Нет

p,thread:integer;
UKRtortik вне форума
Старый 03.03.2014, 21:04   #7
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от UKRtortik Посмотреть сообщение
Нет

p,thread:integer;
Прочитайте сперва, хотя бы про азы работы с потоками в Delphi. А, уже потом пробуйте что-то писать.
Streletz вне форума
Старый 13.03.2014, 15:19   #8
UKRtortik
Форумчанин
 
Регистрация: 25.02.2014
Сообщений: 366
По умолчанию

Что я не так делаю?

Код:
  type
 TPotok=class(TThread)
  private
   html:WideString;
      procedure reg;
  protected
   procedure Execute;override;
end;

var
  Form1: TForm1;
  Potok:TPotok;
  HTTP:TIdHTTP;
  site, html, s:string;
  rege:tregexpr;
  i:integer;
Код:
procedure TPotok.Execute;
begin
 HTTP:=TIdHTTP.Create(nil);
 rege:=TRegExpr.Create;
 rege.Expression:='\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}';
  for i:=0 to Form1.sMemo1.Lines.Count-1 do
  begin
    try
      site:=Form1.sMemo1.Lines.Strings[i];
      html:=HTTP.Get(site);
    except
    end;
    if rege.Exec(html) then
     repeat Synchronize(reg);
     until (not rege.ExecNext) or Potok.Terminated;
    if Potok.Terminated then break;
  end;
  HTTP.Free;
  Rege.Free;
end;
Код:
procedure TForm1.sButton3Click(Sender: TObject);
var
z,p:integer;
begin
for z := 0 to StrToInt(sSpinEdit1.Text) - 1 do
begin
p:=TPotok.Create(true);
with p do begin
 Potok.FreeOnTerminate:=True;
 Potok.Start;
end;
end;
end;
UKRtortik вне форума
Старый 13.03.2014, 15:45   #9
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от UKRtortik Посмотреть сообщение
Что я не так делаю?
Во-первых используешь глобальную переменную HTTP:TIdHTTP;
Дальше не смотрел.
northener на форуме
Старый 15.03.2014, 16:52   #10
UKRtortik
Форумчанин
 
Регистрация: 25.02.2014
Сообщений: 366
По умолчанию

ну что не кто не знает?
UKRtortik вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск ошибки в программе cocaphonix Помощь студентам 7 21.03.2013 16:18
Поиск ошибки Falcao Паскаль, Turbo Pascal, PascalABC.NET 2 09.01.2013 18:56
Поиск ошибки.... Ангел без крыльев Visual C++ 2 21.12.2011 11:00
C++ , поиск ошибки Sokolik1 Помощь студентам 11 09.06.2011 17:33