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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2011, 17:20   #1
SHtirlic1
Пользователь
 
Регистрация: 15.03.2011
Сообщений: 11
По умолчанию работа с потоками

Доброе время суток
кто может подробно в деталях разьяснить работу с потоками
на примере этого исходника
test.rar
SHtirlic1 вне форума Ответить с цитированием
Старый 15.03.2011, 17:28   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

В этом исходнике и не пахнет потоками.
_SERGEYX_ вне форума Ответить с цитированием
Старый 15.03.2011, 17:31   #3
SHtirlic1
Пользователь
 
Регистрация: 15.03.2011
Сообщений: 11
По умолчанию

не кто не говорил что они там есть..я попросил разьяснить то биш этот исходник сделать многопоточным...литература не помогла
SHtirlic1 вне форума Ответить с цитированием
Старый 15.03.2011, 18:02   #4
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

_SERGEYX_, потоками там не может не пахнуть) Хотябы один, но есть

ТС, читай http://forum.icqmag.ru/showthread.php?t=1378
Сразу скажу, что твой проект даже не смотрел.
Для начала определись, что именно ты хочешь исполнять в потоке.
Поток, если его не зациклить, исполнит код внутри процедуры Execute и завершится.
Чаще всего в потоках делают а)сложные вычисления, б)действия, которые приводят к тормозам интерфейса.
Если хочешь понять потоки - сделай пример из указаного мной, а не пытайся сразу применить к своему проекту.
И... просто скажи, зачем именно тебе потоки, многие случаи удается решить и без них.

добавлено

всё-таки не удержался... посмотрел проект.
ИНДИ компоненты отличаются тем, что не создают своего потока, тем самым тормозят интерфейс...

объявляешь класс потока с перекрытием профедуры Execute
описываешь поток
в экзекуте:

создаешь клиент ИНДИ
настраиваешь его
делаешь попытку соединения
Код:
while not INDY.connected do sleep(10);
while INDY.connected do begin
{тут заставляешь инди качать что нужно}
{проверяешь, всё ли скачано}
{вызываешь процедуру синхронизации с помощью Synchronize и передаешь что нужно в основной поток.}
INDY.disconnect; {не забываем}  
end;
это по аналогии очень походит на пример с прогрессбаром...
стоит один раз разобраться с потоками, потом нужно будет только вспомнить правильный снтаксис.
борланд очень доступно реализовал потоки, для начала даже не нужно понимать принцип процесса.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}

Последний раз редактировалось Johnson; 15.03.2011 в 18:14.
Johnson вне форума Ответить с цитированием
Старый 15.03.2011, 18:08   #5
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Вот, там много
_http://forum.vingrad.ru/forum/topic-60076.html
пыщь
JTG вне форума Ответить с цитированием
Старый 15.03.2011, 18:08   #6
SHtirlic1
Пользователь
 
Регистрация: 15.03.2011
Сообщений: 11
По умолчанию

пример исходника
Код:
procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
var
help: TStrings;
s:string;
begin
  help := TStringList.Create;
  help.LoadFromFile('text/help.txt'); //Открыть файл с текстом
if msg='anek' then begin
s := IdHTTP1.Get('http://anekdotov.net/anekdot/random/'+IntToStr(Random(100)+1)+'.html?');
While pos('<BR>',s) <>0 do
delete(s,pos('<BR>',s),4);
Icqclient1.SendMessage(StrToInt(UIN), Copy(s, pos('''>', s) + 2, pos('<INPUT type=image src=', s) - pos('''>', s) -2));
 exit;
 end
 else
 if msg='!help' then begin
Icqclient1.SendMessage(StrToInt(UIN), help.Text);
 end
 else
if (copy(msg,1,8)='!slogan ') then
begin
s := IdHTTP1.Get('http://slogen.ru/s/'+Msg+'');
Icqclient1.SendMessage(StrToInt(UIN), Copy(s, pos('15px">', s) + 6, pos('</div>', s) - pos('15px">', s) -6));
end;
end;
при команде anek все работает при отправке !slogan форма зависает пока не вырубиш процесс
SHtirlic1 вне форума Ответить с цитированием
Старый 15.03.2011, 18:16   #7
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

вот скажи... в чем разница условий анек и слоган?
разница в том, загружаетя через инди или через асю.
выводы делай сам.


извиняюсь, недочитал.
скорее всего даешь неправильный запрос к сайту. в таком случае
Copy(s, pos('15px">', s) + 6, pos('</div>', s) - pos('15px">', s) -6)
вернет пустую строку.
попробуй сделать
Copy(s, pos('15px">', s) + 6, pos('</div>', s) - pos('15px">', s) -6)+' '
добавить пробел к концу
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}

Последний раз редактировалось Johnson; 15.03.2011 в 18:19.
Johnson вне форума Ответить с цитированием
Старый 15.03.2011, 19:00   #8
SHtirlic1
Пользователь
 
Регистрация: 15.03.2011
Сообщений: 11
По умолчанию

Johnson, можеш сделать пример на моем исходнике? мне по примеру будет лучше понять
SHtirlic1 вне форума Ответить с цитированием
Старый 15.03.2011, 19:05   #9
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

по ссылке же намного понятнее... у меня есть примеры только на голых сокетах, я в острой форме не уважаю инди и их продукцию...

посмотрел щас... ты там запутаешься, там переплетены тесно несколько классов с потоками и сокетами... а простого примера нет.

по ссылке в первой же врезке есть самый простой пример запуска потока.

тебе нужно один раз объявить класс потока, и при каждом запросе создавать поток, соединять инди, качать нужное, завершать поток.
щас настряпаю простецкий пример...

вот. главное помните, что переменные основного и дополнительного потока одновременно доступны (правильно) только во время синхронизации. если попробуете, скажем, установить текст мемо прямо из второго потока, это может привести к запрету доступа (=ошибке)
Вложения
Тип файла: rar tmp_INDY.rar (235.6 Кб, 9 просмотров)
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}

Последний раз редактировалось Johnson; 15.03.2011 в 19:37. Причина: добавлено
Johnson вне форума Ответить с цитированием
Старый 15.03.2011, 19:45   #10
SHtirlic1
Пользователь
 
Регистрация: 15.03.2011
Сообщений: 11
По умолчанию

При много благодарен так чуть понятней стало))
SHtirlic1 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с потоками gagarin0 Win Api 4 05.11.2010 02:30
Работа с потоками gagarin0 Помощь студентам 0 28.10.2010 22:12
работа с потоками session Общие вопросы C/C++ 6 21.06.2010 17:13
Работа с потоками Neymexa Общие вопросы .NET 16 23.04.2009 17:42
работа с потоками Alex_Pro Общие вопросы .NET 1 01.07.2008 07:25