ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

23.04.2010, 14:30
|
|
Участник форума
Регистрация: 09.05.2009
Сообщений: 186
Провел на форуме: 1682814
Репутация:
102
|
|
потоки и 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
|
|
|

23.04.2010, 14:38
|
|
Новичок
Регистрация: 26.08.2009
Сообщений: 19
Провел на форуме: 977507
Репутация:
33
|
|
Создавай все компоненты в Execute перед выполнением работы а не в процедурах.
И уничтожай потом в Destroy или где там у тебя завершение.
И делай синхронизацию потоков с формой.
Ты можешь в литровую банку сразу 5 рук засунуть?
З.Ы. И что у тебя за бред с созданием TStringList?
Он у тебя создаётся по сто раз и ни разу не уничтожается!
|
|
|

23.04.2010, 14:39
|
|
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
Провел на форуме: 1819761
Репутация:
180
|
|
1) Synchronize
2) объект TIdHTTP сделай локальным для потока
Ты можешь в литровую банку сразу 5 рук засунуть?
Если руки кривые, обычно так и делают =)
|
|
|

23.04.2010, 15:02
|
|
Участник форума
Регистрация: 09.05.2009
Сообщений: 186
Провел на форуме: 1682814
Репутация:
102
|
|
Сообщение от ange007
Создавай все компоненты в Execute перед выполнением работы а не в процедурах.
И уничтожай потом в Destroy или где там у тебя завершение.
З.Ы. И что у тебя за бред с созданием TStringList?
Он у тебя создаётся по сто раз и ни разу не уничтожается!
спасибо, учту.
ды это примерный код, я его тут и придумал (: главное - айдихттп
Сообщение от M_script_
2) объект TIdHTTP сделай локальным для потока
2) пример можно? 
Последний раз редактировалось 1n0y; 23.04.2010 в 15:04..
|
|
|

23.04.2010, 15:09
|
|
Новичок
Регистрация: 26.08.2009
Сообщений: 19
Провел на форуме: 977507
Репутация:
33
|
|
Сообщение от 1n0y
2) пример можно? 
Код:
tnew = class(tthread)
private
idHTTP:TIdHTTP;
procedure getln;
protected
procedure execute; override;
end;
|
|
|

23.04.2010, 15:10
|
|
Постоянный
Регистрация: 13.11.2009
Сообщений: 437
Провел на форуме: 709575
Репутация:
17
|
|
один из простых вариантов юзать MPI 
|
|
|

23.04.2010, 15:15
|
|
Участник форума
Регистрация: 09.05.2009
Сообщений: 186
Провел на форуме: 1682814
Репутация:
102
|
|
блин, пример как создавать 
в tform1.button1click добавить это?
new1.idHTTP=idhttp.create; (или как там правильно создавать?)
new2.idHTTP=idhttp.create;
newN.idHTTP=idhttp.create;
|
|
|

23.04.2010, 15:16
|
|
Участник форума
Регистрация: 09.05.2009
Сообщений: 186
Провел на форуме: 1682814
Репутация:
102
|
|
Сообщение от cheater_man
один из простых вариантов юзать MPI 
"Существуют реализации для языков Фортран 77/90, Си и Си++." 
|
|
|

23.04.2010, 15:32
|
|
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме: 828081
Репутация:
84
|
|
IdHttp надо создавать в конструкторе класса потока..и уничтожать в деструкторе (хотя так и не обязательно, у меня например idhttp и потоки существуют независимо друг от друга, у меня что-то вроде многопоточной очереди)
ТС я тебе советую сначала почитать про классы, научится их писать самому, иначе тебе придется ой как трудно в создании мультитредных сетевых аппликаций
Последний раз редактировалось GhostOnline; 23.04.2010 в 15:35..
|
|
|

23.04.2010, 15:48
|
|
Постоянный
Регистрация: 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)
|
|
|
|