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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2013, 21:08   #1
niva622
Форумчанин
 
Регистрация: 31.12.2006
Сообщений: 114
По умолчанию

Здравствуйте, продолжаю изучение thread потоков) Столкнулся с проблемой, есть программа, нужно динамически создать tidhttp и отправить get запросы с изменением одного символа в запросе, только нужно это сделать в потоке, т.е что бы одновременно запускалось заданное количество потоков и парсило данные...
З.Ы.
for i:=0 to 5000 do
begin
idhttp[i].get('http://test.ru'+inttostr(i))
end;
При запуске третьего потока, цикл начинает выполняться сначало, а нужно что бы от 0 до 5000 отправляло запросы не повторяясь...

Ломаю голову кучу времени...

По сути можно синхронизировать еще один поток через synchronize, только пользователь сам должен выбирать колличество потоков...

Последний раз редактировалось Stilet; 23.05.2013 в 21:27.
niva622 вне форума Ответить с цитированием
Старый 23.05.2013, 21:30   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А ты сделай свойство для твоего класса потока, куда при запуске будешь передавать значение, которое еще не прошли другие потоки.
Или можно сделать глобальную переменку, куда потоки будут записывать под синхронизацией последний номер счетчика, а новые потоки его подхватывать.
Впрочем первое надежнее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.05.2013, 21:33   #3
niva622
Форумчанин
 
Регистрация: 31.12.2006
Сообщений: 114
По умолчанию

Можно по поводу первого пример ? как это использовать в крации
Например, как при запуске, передать значение, которое не прошли другие потоки ?
Помогите решить проблему буду очень признателен...

Последний раз редактировалось niva622; 23.05.2013 в 22:38.
niva622 вне форума Ответить с цитированием
Старый 24.05.2013, 12:07   #4
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

Код:
idhttp[i].get('http://test.ru'+inttostr(i))
Зачем idhttp[i]? Это уже не динамическое создание, а фигня какая-то. В самом потоке используй критические секции и увеличивай счетчик, например:
Код:
  CS.Enter;
  Inc(I);
  CS.Leave;
Переменную I назначь глобальной и при считывании/записи значения этой переменной используй крит. секции. До создания потоков присвой I := 0; Настоятельно рекомендую ознакомиться с крит. секциями. И про динамическое создание тоже.
Lardes вне форума Ответить с цитированием
Старый 24.05.2013, 12:14   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

А где тут потоки?
eval вне форума Ответить с цитированием
Старый 24.05.2013, 12:51   #6
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию

ТС, вот мне это очень сильно в свое время помогло
bakanaev вне форума Ответить с цитированием
Старый 25.05.2013, 12:08   #7
niva622
Форумчанин
 
Регистрация: 31.12.2006
Сообщений: 114
По умолчанию

всем спасибо буду разбираться
niva622 вне форума Ответить с цитированием
Старый 25.05.2013, 12:18   #8
niva622
Форумчанин
 
Регистрация: 31.12.2006
Сообщений: 114
По умолчанию

Цитата:
Сообщение от Lardes Посмотреть сообщение
Код:
idhttp[i].get('http://test.ru'+inttostr(i))
Зачем idhttp[i]?
Запускаю цикл, а I это счетчик... что бы были разные компоненты idhttp..
niva622 вне форума Ответить с цитированием
Старый 25.05.2013, 13:03   #9
niva622
Форумчанин
 
Регистрация: 31.12.2006
Сообщений: 114
По умолчанию

Все разобрался) нужно было всего лишь использовать процедуру INC

Последний раз редактировалось niva622; 25.05.2013 в 13:36.
niva622 вне форума Ответить с цитированием
Старый 25.05.2013, 18:18   #10
niva622
Форумчанин
 
Регистрация: 31.12.2006
Сообщений: 114
По умолчанию

Снова недопонимание,
Если нажимать на кнопку самому тем самым увеличивая потоки, то все нормально
while a do
begin
Inc(iss);
Sleep(100);
Synchronize(updateCaption) ;
end;
crit.Leave ;
end;

updateCaption;
begin
Form1.lst1.Items.Add(IntToStr(iss))
end;

а если
for i:=0 to 4 do
begin
test:=thread.Create(true);
test.Priority:=tpNormal ;
test.Resume
end;
То поток находит на поток и повторяет числа...
niva622 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передать массив байт [D7]Indy => [XE2]Indy Человек_Борща Работа с сетью в Delphi 1 15.09.2012 22:06
У меня borland developer studio delphi 2006 так вот как вставить на вкладку tool palette компоненты Indy Clients и Indy Misc Artem_host Общие вопросы Delphi 0 01.02.2012 09:55
как обновить indy 9 на indy 10 Пилигрим Компоненты Delphi 16 30.04.2010 10:11
Многопоточность Indy AVer Работа с сетью в Delphi 14 14.02.2009 22:10
Многопоточность с INDY Ragnarek Работа с сетью в Delphi 2 27.01.2009 13:25