-
Такая задача:
Пишу компонент, он работает с сокетами. Один из его методов создает сокет (TClientSocket), обвешевает его обработчиками, соединяет его с удаленным сервером и дальше должен дождаться пока тот(сокет) закончит общаться с серваком и отсоединится от него.
Как реализовать такое ожидание?
-
В просто приложении это достигалось созданием цикла вида:
while GlobalFlag do
Application.ProcessMessages
но под компонентом этого дела нет, а как быть?
-
В Indy сокеты то блокирующие! Так что выносите коннект в другой поток, и ожидайте его завершение, хотя бы.
-
То в Инди! А я говорю про TClientSocket.
Они асинхронные.
Пока идея с вынесением такого объекта в отдельный поток со всеми его обработчиками - единственная, но может есть более правильный подход?
-
> В просто приложении это достигалось созданием цикла вида:
>
> while GlobalFlag do
> Application.ProcessMessages
>
> но под компонентом этого дела нет, а как быть?
И куда это дело пропало под компонентом ???
> Пока идея с вынесением такого объекта в отдельный поток
> со всеми его обработчиками - единственная, но может есть
> более правильный подход?
А почему бы и наследнику не оставить асинхронность, и не пихать всё в один метод?
Тем более, наличие асинхронности у компонента говорит о наличии механизма асинхронного выполнения. К чему ещё одна обертка?
-
А чем обусловлен выбор асинхронного TClientSocket в том случае, когда нужна блокировка? Не проще ли взять компонент, реализующий блокирующие сокеты или вообще написать всё на API?
-
> То в Инди!
А, точна, сорри, невнимателен...
-
> под компонентом этого дела нет
Какого "дела" ? Ты о чем ?
-
> Какого "дела" ? Ты о чем ?
> И куда это дело пропало под компонентом ???
А можно на примере? Что нужно подключить и и т.п.
Без подключения Forms, Application - undeclared indentefier.
С ним - Access violatation.
Покажите как пользоваться....
> А чем обусловлен выбор асинхронного TClientSocket в том
> случае, когда нужна блокировка? Не проще ли взять компонент,
> реализующий блокирующие сокеты или вообще написать всё
> на API?
Неа, не проще. Задача именно такая.
-
Тааак.
Нашел решение.
Вопрос снимается и ветку считаем закрытой