Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Правильно ли работаю с потоками? [D7, XP]


Страницы:   1 2 3 4 5

Lamer6666 ©   (2011-07-26 23:27:00) 

Доброго времени суток уважаемые!
Решаю следующую задачу, по таймеру получаю методом GET информацию. Данную задачу необходимо реализовать в потоке. Делаю так:

Описал тип
type
 TKdServerThread = class(TThread)
 private
 Procedure GetIn;
 protected
   procedure execute; override;
 end;


Процедура исполнения:
Procedure TKdServerThread.execute;
begin
  Synchronize(GetIn);
end;


Выполняю нужный мне код:

Procedure TKdServerThread.GetIn;
begin
   Try
      Form1.Memo1.Lines.Add(IdHTTP99.Get('....'));
   Except
   End;
  Application.ProcessMessages;
end;


Далее по таймеру запускаю потоки:
procedure TForm1.Timer1Timer(Sender: TObject);
 var NewThread: TKdServerThread;
begin
 NewThread:=TKdServerThread.Create(true);
 NewThread.FreeOnTerminate:=true;
 NewThread.Priority:=tpLowest;
 NewThread.Resume;
end;


вопрос:
1. Правильно ли реализовано решение?
2. Что будет если один из потоков повиснет при выполнении метода GET, продолжат ли работу остальные потоки?
3. Как ограничить количество потоков, есть некий параметр показывающий кол-во работающих потоков, или нужно считать кол-во созданных потоков  самому?
Огромное спасибо.


Игорь Шевченко   (2011-07-26 23:56:00) [81]


> Процедура исполнения:
> Procedure TKdServerThread.execute;
> begin
>   Synchronize(GetIn);
> end;


Вот скажите мне, откуда этот код ?


Lamer6666   (2011-07-26 23:49:00) [82]


> Execute получить текст страницы (IdHTTP99.Get('....')) в
> переменную, а в GetIn() запихнуть в мемо эту переменную.
>

Понял, переделываю.


antonn   (2011-07-26 23:36:00) [83]

Не правильно, этот код выполнится полностью в главном потоке+накладные расходы на доп.поток.
нужно в Execute получить текст страницы (IdHTTP99.Get('....')) в переменную, а в GetIn() запихнуть в мемо эту переменную.


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо