Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разрушение потоков 
:(
    Опции темы
shadowrun
Дата 28.11.2011, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 28.11.2011

Репутация: нет
Всего: нет



Доброго времени суток, уважаемые форумчане. Суть проблемы такова: программа создает в цикле потоки, каждый из них выполняет определенное действие по хттп протоколу, не зависимо от результата увеличивает показатель прогресс бара. Сколько бы потоков не запускал, программа подвисает примерно на 85%. И еще, правильно ли я уничтожаю потоки? Вот код:
Создание потоков...
Код

var
 A: array of Potok;
i: integer;
begin
ProgressBar1.Max := Memo2.Lines.Count - 1;
ProgressBar1.Position := 0;
SetLength(A,memo2.Lines.Count);
for I := 0 to memo2.Lines.Count -1  do
 begin
   A[i] := Potok.Create(false,i);
   A[i].FreeOnTerminate := True;
 end;

Код потока
Код

procedure potok.Execute;
var
S: String;
Http: TIdHTTP;
CS: TCriticalSection;
begin
CS := TCriticalSection.Create;
Http := TIdHTTP.Create;
Http.HandleRedirects := False;

try
Cs.Enter;
S := Http.Get(Отправка_гет_запроса);
Cs.Leave;
...

обработка полученных данных и отправка их в основную форму

...
finally
CS.Free;
Http.Free;
Form1.ProgressBar1.Position := Form1.ProgressBar1.Position +1;
end;

end;

PM MAIL   Вверх
Alexeis
Дата 28.11.2011, 22:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Если объект создан в потоке то критическая секция там ни к чему, потому что нет общих данных. Прогрессбар лучше инкрементировать в OnTerminate потока. Насколько я помню он будет вызываться в контексте главного потока.

Это сообщение отредактировал(а) Alexeis - 28.11.2011, 23:50


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
shadowrun
Дата 28.11.2011, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 28.11.2011

Репутация: нет
Всего: нет



Цитата(Alexeis @ 28.11.2011,  22:47)
Если объект создан в потоке то критическая секция там ни к чему, потому нет общих данных. Прогрессбар лучше инкрементировать в OnTarminate потока. Насколько я помню он будет вызываться в контексте главного потока.

Спасибо за ответ. Обязательно учту. 
PM MAIL   Вверх
MetalFan
Дата 28.11.2011, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(shadowrun @  28.11.2011,  22:04 Найти цитируемый пост)
подвисает примерно на 85%

хм, а что делает программа остальные 15%? )))

Alexeis все правильно сказал. CS - в топку. в данном случае она бессмысленна. Ну и обращение к прогресс-бару на форме из потока - очень нехорошо.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
shadowrun
Дата 28.11.2011, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 28.11.2011

Репутация: нет
Всего: нет



Цитата(MetalFan @ 28.11.2011,  23:07)
хм, а что делает программа остальные 15%? )))

Alexeis все правильно сказал. CS - в топку. в данном случае она бессмысленна. Ну и обращение к прогресс-бару на форме из потока - очень нехорошо.

Хм... Может посоветуете как быть с прогрессбаром, а то в моем случае необходима визуализация выполнения процесса...
PM MAIL   Вверх
ZBugz
Дата 29.11.2011, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Юзай свойства Indy onWorkBegin, onWorkEnd и onWork и выводи что хочешь.
PM MAIL   Вверх
Alexeis
Дата 29.11.2011, 08:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(shadowrun @  29.11.2011,  00:23 Найти цитируемый пост)
Хм... Может посоветуете как быть с прогрессбаром

  Так и делать, просто увеличивать счетчик в обработчике OnTerminate наследника TThread .


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
SergeySpirin
Дата 30.11.2011, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 19.7.2011

Репутация: нет
Всего: нет



Цитата(shadowrun @ 28.11.2011,  23:23)
Цитата(MetalFan @ 28.11.2011,  23:07)
хм, а что делает программа остальные 15%? )))

Alexeis все правильно сказал. CS - в топку. в данном случае она бессмысленна. Ну и обращение к прогресс-бару на форме из потока - очень нехорошо.

Хм... Может посоветуете как быть с прогрессбаром, а то в моем случае необходима визуализация выполнения процесса...

Смотри Synchronize(), любое GUI-действие должно быть синхронизировано с главным потоком.

Вообще же, даже в "болванке" нового класса потока об этом тебе напоминают и пишут:

{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure TMyThread.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; 

}
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0535 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.