ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

потоки и indy [delphi]
  #1  
Старый 23.04.2010, 14:30
1n0y
Участник форума
Регистрация: 09.05.2009
Сообщений: 186
Провел на форуме:
1682814

Репутация: 102
Отправить сообщение для 1n0y с помощью ICQ
По умолчанию потоки и indy [delphi]

допустим есть код:

Код:
procedure tnew.getln;
var
 t:tstringlist;
 i:integer;
begin
 for i:=0 to form1.memo1.lines.count-1 do
 begin 
  t:=stringlist.create;
  t.text:=form1.idhttp1.get(form1.memo1.lines[i]);
  form1.memo2.lines.add(t.text);
 end;
end;
как сделать, чтобы, скажем, потоков 20 паралельно его выполняли?

пытался примерно вот так:

Код:
tnew = class(tthread)
 private
  procedure getln;
 protected
 procedure execute; override;
end;

var
 form1: tform1;
 new1, new2: tnew;
 i:integer;

procedure tform1.button1click(sender: tobject);
begin
 new1 := tnew.create(true);
 new1.freeonterminate := true;
 new1.s := '1 thread';
 new1.priority := tpnormal;
 new2 := tnew.create(true);
 new2.freeonterminate := true;
 new2.s := '2 thread';
 new2.priority := tpnormal;
 new1.resume;
 new2.resume;
end;



procedure tnew.getln;
var
 t:tstringlist;
 i:integer;
begin
 for i:=0 to form1.memo1.lines.count-1 do
 begin 
  t:=stringlist.create;
  t.text:=form1.idhttp1.get(form1.memo1.lines[i]);
  form1.memo2.lines.add(t.text);
 end;
end;

procedure tnew.execute;
begin
 getln;
end;
но idhttp1 вылетает с ошибкой или виснет (непомню точно, влом делфи включать)
краем уха слышал про idthreadcomponent, но адекватных примеров его использования я не нашел..
помогите!!!!11
 
Ответить с цитированием

  #2  
Старый 23.04.2010, 14:38
ange007
Новичок
Регистрация: 26.08.2009
Сообщений: 19
Провел на форуме:
977507

Репутация: 33
По умолчанию

Создавай все компоненты в Execute перед выполнением работы а не в процедурах.
И уничтожай потом в Destroy или где там у тебя завершение.
И делай синхронизацию потоков с формой.
Ты можешь в литровую банку сразу 5 рук засунуть?

З.Ы. И что у тебя за бред с созданием TStringList?
Он у тебя создаётся по сто раз и ни разу не уничтожается!
 
Ответить с цитированием

  #3  
Старый 23.04.2010, 14:39
M_script_
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
Провел на форуме:
1819761

Репутация: 180
Отправить сообщение для M_script_ с помощью ICQ
По умолчанию

1) Synchronize
2) объект TIdHTTP сделай локальным для потока

Цитата:
Ты можешь в литровую банку сразу 5 рук засунуть?
Если руки кривые, обычно так и делают =)
 
Ответить с цитированием

  #4  
Старый 23.04.2010, 15:02
1n0y
Участник форума
Регистрация: 09.05.2009
Сообщений: 186
Провел на форуме:
1682814

Репутация: 102
Отправить сообщение для 1n0y с помощью ICQ
По умолчанию

Цитата:
Сообщение от ange007  
Создавай все компоненты в Execute перед выполнением работы а не в процедурах.
И уничтожай потом в Destroy или где там у тебя завершение.
З.Ы. И что у тебя за бред с созданием TStringList?
Он у тебя создаётся по сто раз и ни разу не уничтожается!
спасибо, учту.

ды это примерный код, я его тут и придумал (: главное - айдихттп



Цитата:
Сообщение от M_script_  
2) объект TIdHTTP сделай локальным для потока
2) пример можно?

Последний раз редактировалось 1n0y; 23.04.2010 в 15:04..
 
Ответить с цитированием

  #5  
Старый 23.04.2010, 15:09
ange007
Новичок
Регистрация: 26.08.2009
Сообщений: 19
Провел на форуме:
977507

Репутация: 33
По умолчанию

Цитата:
Сообщение от 1n0y  
2) пример можно?
Код:
tnew = class(tthread)  
private   
idHTTP:TIdHTTP;
procedure getln;  
protected  
procedure execute; override; 
end;
 
Ответить с цитированием

  #6  
Старый 23.04.2010, 15:10
cheater_man
Постоянный
Регистрация: 13.11.2009
Сообщений: 437
Провел на форуме:
709575

Репутация: 17
По умолчанию

один из простых вариантов юзать MPI
 
Ответить с цитированием

  #7  
Старый 23.04.2010, 15:15
1n0y
Участник форума
Регистрация: 09.05.2009
Сообщений: 186
Провел на форуме:
1682814

Репутация: 102
Отправить сообщение для 1n0y с помощью ICQ
По умолчанию

блин, пример как создавать
в tform1.button1click добавить это?

new1.idHTTP=idhttp.create; (или как там правильно создавать?)
new2.idHTTP=idhttp.create;
newN.idHTTP=idhttp.create;
 
Ответить с цитированием

  #8  
Старый 23.04.2010, 15:16
1n0y
Участник форума
Регистрация: 09.05.2009
Сообщений: 186
Провел на форуме:
1682814

Репутация: 102
Отправить сообщение для 1n0y с помощью ICQ
По умолчанию

Цитата:
Сообщение от cheater_man  
один из простых вариантов юзать MPI
"Существуют реализации для языков Фортран 77/90, Си и Си++."
 
Ответить с цитированием

  #9  
Старый 23.04.2010, 15:32
GhostOnline
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме:
828081

Репутация: 84
По умолчанию

IdHttp надо создавать в конструкторе класса потока..и уничтожать в деструкторе (хотя так и не обязательно, у меня например idhttp и потоки существуют независимо друг от друга, у меня что-то вроде многопоточной очереди)
ТС я тебе советую сначала почитать про классы, научится их писать самому, иначе тебе придется ой как трудно в создании мультитредных сетевых аппликаций

Последний раз редактировалось GhostOnline; 23.04.2010 в 15:35..
 
Ответить с цитированием

  #10  
Старый 23.04.2010, 15:48
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию

С сокетами легче синхронизировать
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установка Indy 10.5.6 НTL С/С++, C#, Delphi, .NET, Asm 10 20.12.2009 09:15
Indy 10 - проблема mailbrush С/С++, C#, Delphi, .NET, Asm 9 25.07.2009 16:56
[Delphi] Threads (проблема) Flenov С/С++, C#, Delphi, .NET, Asm 11 17.03.2009 08:45



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


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




ANTICHAT.XYZ