![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Правильно ли работаю с потоками? [D7, XP]
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() запихнуть в мемо эту переменную.