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

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

Работа компонента внутри потока. [D5, Win2k]


Карелин Артем ©   (2003-08-22 11:19:00) 

Ситуация такая: хочется запустить компонент для организации FTP-сервера внутри потока. Какой цикл надо писать внутри Execute для того, чтобы компонент мог нормально ждать коннекта и чтобы поток при ожиданиии не загружал систему?


Карелин Артем   (2003-08-22 15:18:00) [1]

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


Reindeer Moss Eater   (2003-08-22 15:11:00) [2]

Код реализован так, что в обычной программе достаточно установить параметры и открыть. После этого идет обработка событий в обработчиках.

А теперь спроси себя, зачем создание этого компонента помещать во вторичный поток?


Карелин Артем   (2003-08-22 13:42:00) [3]

Который не блокирует поток.


Digitman   (2003-08-22 13:40:00) [4]


> Карелин Артем


> Не думаю, что ответ зивисит от типа компонента.


зависит. еще как зависит !
одни компоненты реализуют только синхронный транспорт, другие - только асинхронный, третьи - и тот и другой

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

асинхронный транспорт , напротив, блокировать код.поток не будет, но это потребует организации вышеуказанного цикла

ты должен определиться, какой будешь использовать компонент и в каком режиме


Карелин Артем   (2003-08-22 13:34:00) [5]

>>В начале Execute создать экземпляр.
>>Установить параметры, и открыть на прослушивание.
Уже есть
>>Дальнейший код очень сильно зависит от конкретной реализации конкретного компонента.
Код реализован так, что в обычной программе достаточно установить параметры и открыть. После этого идет обработка событий в обработчиках.
>>И свой велосипед становится ненужен.
Ну а если без флейма??

По идее в цикле должно быть что-то типа ProcessMessages...


Reindeer Moss Eater   (2003-08-22 13:20:00) [6]

Кроме всего прочего многие классы-инкапсуляторы FTP серверов имеют встроенную поддержку обработки соединений внутри вторичных потоков. И свой велосипед становится ненужен.


Reindeer Moss Eater   (2003-08-22 13:17:00) [7]

В начале Execute создать экземпляр.
Установить параметры, и открыть на прослушивание.
Дальнейший код очень сильно зависит от конкретной реализации конкретного компонента.


Карелин Артем   (2003-08-22 12:58:00) [8]

Не думаю, что ответ зивисит от типа компонента.
Значит так:
procedure MyThread.Execute;
begin
SomeComponent:=TSomeComponent.Create(...);
//конкретно FtpServer:=TFtpServer.Create(nil), заполнение всех свойств и активация
while not Terminated do
begin
// Что вставить сюда, чтобы компонент занимался своими делами
// Конкретно слушал порт и отвечал на запросы.
// Т.е. чтобы отрабатывались обработчики событий, которые оформлены как методы потока и чтобы при этом этот цикл не хавал слишком много времени проца.
end;
end;


Reindeer Moss Eater   (2003-08-22 11:58:00) [9]

Про любой ответа не дадут. Дадут про конкретный.


Карелин Артем   (2003-08-22 11:34:00) [10]

Да любой! хоть TServerSocket, хоть TFtpServer.


Reindeer Moss Eater   (2003-08-22 11:28:00) [11]

чтобы компонент мог нормально ждать коннекта и чтобы поток при ожиданиии не загружал систему?

Какой компонент?


Наверх

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