Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-90212
VovaKomarov
2001-12-24 11:35
2002.01.28
BLOB


1-90283
Григорий Ситнин
2002-01-10 15:28
2002.01.28
Создание TFrame из внешней DLL... Вообще, реально?


14-90369
Ross
2001-12-03 21:56
2002.01.28
Игры


4-90418
Ghost666
2001-11-24 04:00
2002.01.28
EXENAME


6-90334
Di_wind
2001-11-06 16:27
2002.01.28
Книги.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский