Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.01.28;
Скачать: CL | DM;

Вниз

Про процедуру и обработку событий   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.015 c
1-90251
Alex Marmuzevich
2002-01-08 23:12
2002.01.28
DLL и EXE в одном флаконе.


14-90359
MC TOL
2001-12-03 14:40
2002.01.28
Геометрическая задачка для 8-го класса.


1-90293
Phobos
2002-01-10 23:08
2002.01.28
Как сделать так чтобы прога при разных разрешениях смотрелась одинаково?


4-90439
maxi
2001-11-24 10:37
2002.01.28
Как работает Ctrl-Alt-Del ? Список процессов.


3-90194
Грифон
2001-12-23 11:33
2002.01.28
SQL