Форум: "Основная";
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];
ВнизПро процедуру и обработку событий Найти похожие ветки
← →
hacker (2002-01-04 10:11) [0]Проблема такая: создаю динамически объект в процедуре и нужно в ней же использовать труды события этого объекта, а оно возникает, после выхода из процедуры. Получается, что оно возникает после того как мне понадобилось, к тому же объекта вроде как и нет.
Может его типа в отдельный поток запихать или что-то в этом роде?
Кто-нибудь решал такие проблемы?
← →
hacker (2002-01-04 11:26) [1]Помогите кто-нибудь, Я уже запарился совсем
← →
panov (2002-01-04 11:28) [2]Так непонятно, что ты хочешь.
← →
hacker (2002-01-04 11:50) [3]Типа вот что: есть процедура, в ней создаю TSocketClient динамически (потому, что в DLL) у которого есть событие OnRead в котором приходят данные, НАДО получить эти данные и обработать в этой процедуре, а как их получить, если событие возникает только после выхода из этой процедуры...
Вот...
Что делать???!!!
← →
NailS (2002-01-04 12:27) [4]Пересмотреть архитектуру приложения
или твой сокет сделать глобальной переменной
или цикл в теле процедуры, чтобы из нее не выходить пока не получены данные.
while not DataRecieve do
Application.ProcessMessages;
Обработчик OnDataRecieve
...
DataRecieve := True;
...
← →
Builder (2002-01-04 13:53) [5]А не нужно ли присвоить TSocketClient.OnRead := MyRead, которая уже и будет читать и делать то, что нужно - ведь ее ты опишешь...
← →
Hacker (2002-01-04 15:23) [6]Builder, этим мы только зададим обработчик(это у меня прописано),
дело в том, что он вызывается(происходит событие) когда я сказал,
Я не понял, ты мне предлогаешь ее самому MyRead вызывать, а смысл, я данные от сокета хочу получить
← →
Builder (2002-01-04 15:41) [7]Сорри, не очень понял. Но тогда я согласен с NailS © - стоит ли все бросать в обну и туже процедуру?
← →
Hacker (2002-01-04 20:27) [8]Как NailS сказал это хорошо (для текущего положения моего проекта), но все будет так - не моя прога запускает мою процедуру, которая сидит в DLL, и ждет ответа ввиде буфера. Моя процедура должна закачать что требуют из инета, и отдать скачанное этой проге. Для этого мне надо создать TClientSocket, как-то получить данные из ее события и отдать в буфер.
Проблемы: 1) Там не будет TApplication , поэтому вариант NailS вроде не подходит
2) нужно создать объект и обработать его событие, и отдать то что насобирал обратно как результат вызываемой функции.
Вот как это вообще можно реализовать - создать объект в новом потоке??? - пока работаю в этом направлении, но не получается
← →
Hacker (2002-01-06 21:12) [9]Кто знает - HELLLPPP!!!! MEEEEEE!!!!!
← →
marat_from_tomsk (2002-01-08 05:40) [10]в твоей dll
должна быть
1. функция инициализации
в которой создается сокет, вешаются обработчики и т.д.
2. собирание данных
3. взять собранную информацию
и к тому же все желательно делать с учетом того
что процессов несколько
то есть необходимо использовать блокировки (крит. секции)
классическая задача о читателе и писателе
← →
NailS (2002-01-08 13:13) [11]По-проблеме один
Если используется TClientSocket, тогда используется Forms,
если используется Forms используется TApplication. Вроде проблема решилась.
Информация к размышлению
Был реализован компонент доступа к данным на базе длл.
Очень похоже на то, что предложил marat_from_tomsk ©
Экспортируется 4 функции
1. Инициализация соединения
2. Запрос на получение данных
3. Проверка готовности данных (приложение забирает данные из длл)
4. Завершение работы с длл.
← →
Builder (2002-01-08 15:33) [12]По тому, как хочет Hacker © (04.01.02 20:27) получается, что программа, которая вызовет библиотеку будет висеть и ждать, пока та будет что-то доставать из инета.
Выглядит не хорошо.
marat_from_tomsk © (08.01.02 05:40) Предлагает классическое правильное решение
← →
Hacker (2002-01-09 11:36) [13]Ладно - пересмотрю архитектуру под marat_from_tomsk ©
, но NailS ©, с чего ты взял что
"Если используется TClientSocket, тогда используется Forms...".
Если он VC - это не мешает обычно использовать его как не VC. И это вроде получается не проблема.
2) А что это за "классическая задача о читателе и писателе", я еще о ней не смышал(точнее про потоки я знаю проблемы в виде теории). Расскажите..
← →
NailS (2002-01-09 11:48) [14]TClientSocket описан в модуле ScktComp.pas,
а этот модуль использует Forms (implementation uses Forms, Consts;)
TClientSocket содержит поле FClientSocket: TClientWinSocket;
а TClientWinSocketнаследник от TCustomWinSocket, а TCustomWinSocket даже обращается к Application.HandleException(Self);
Вот вроде и все.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c