Конференция "Компоненты" » Application.ProcessMessages или как организовать ожидание? [D7, Win95/98, WinME, NT4, Win2k, WinXP]
 
  • samael6 © (21.06.07 18:45) [0]
    Такая задача:
    Пишу компонент, он работает с сокетами. Один из его методов создает сокет (TClientSocket), обвешевает его обработчиками, соединяет его с удаленным сервером и дальше должен дождаться пока тот(сокет) закончит общаться с серваком и отсоединится от него.
    Как реализовать такое ожидание?
  • Samael6 © (21.06.07 19:16) [1]
    В просто приложении это достигалось созданием цикла вида:
    while GlobalFlag do
    Application.ProcessMessages

    но под компонентом этого дела нет, а как быть?
  • Инс (21.06.07 19:59) [2]
    В Indy сокеты то блокирующие! Так что выносите коннект в другой поток, и ожидайте его завершение, хотя бы.
  • Samael6 © (21.06.07 23:32) [3]
    То в Инди! А я говорю про TClientSocket.
    Они асинхронные.
    Пока идея с вынесением такого объекта в отдельный поток со всеми его обработчиками - единственная, но может есть более правильный подход?
  • ЮЮ © (22.06.07 03:21) [4]
    > В просто приложении это достигалось созданием цикла вида:
    >
    > while GlobalFlag do
    > Application.ProcessMessages
    >
    > но под компонентом этого дела нет, а как быть?


    И куда это дело пропало под компонентом ???


    > Пока идея с вынесением такого объекта в отдельный поток
    > со всеми его обработчиками - единственная, но может есть
    > более правильный подход?

    А почему бы и наследнику не оставить асинхронность, и не пихать всё в один метод?
    Тем более, наличие асинхронности у компонента говорит о наличии механизма асинхронного выполнения. К чему ещё одна обертка?
  • Однокамушкин (22.06.07 08:39) [5]
    А чем обусловлен выбор асинхронного TClientSocket в том случае, когда нужна блокировка? Не проще ли взять компонент, реализующий блокирующие сокеты или вообще написать всё на API?
  • Инс (22.06.07 10:02) [6]

    > То в Инди!


    А, точна, сорри, невнимателен...
  • Сергей М. © (22.06.07 11:51) [7]

    > под компонентом этого дела нет


    Какого "дела" ? Ты о чем ?
  • Samael6 © (22.06.07 14:33) [8]

    > Какого "дела" ? Ты о чем ?


    > И куда это дело пропало под компонентом ???


    А можно на примере? Что нужно подключить и и т.п.
    Без подключения Forms, Application - undeclared indentefier.
    С ним - Access violatation.
    Покажите как пользоваться....


    > А чем обусловлен выбор асинхронного TClientSocket в том
    > случае, когда нужна блокировка? Не проще ли взять компонент,
    >  реализующий блокирующие сокеты или вообще написать всё
    > на API?

    Неа, не проще. Задача именно такая.
  • samael6 © (22.06.07 18:48) [9]
    Тааак.
    Нашел решение.
    Вопрос снимается и ветку считаем закрытой
 
Конференция "Компоненты" » Application.ProcessMessages или как организовать ожидание? [D7, Win95/98, WinME, NT4, Win2k, WinXP]
Есть новые Нет новых   [119275   +8][b:0][p:0]