Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2011.08.28;
Скачать: [xml.tar.bz2];

Вниз

Как удалить динамически созданные ClientSocket при OnDisconnect?   Найти похожие ветки 

 
Сергей   (2009-04-28 16:18) [0]

Здравствуйте
Помогите пожалуйста с моей проблемой.
Я хочу при удаленном разрыве соединения (по событию) удалить динамически созданный объект компонента ClientSocket

маленький поясняющий пример кода:

глобальный var
ClientSocket: TClientSocket;

создаю
ClientSocket:=TClientSocket.Create(Self);
ClientSocket.Host := "127.0.0.1";
ClientSocket.Port := 5000;
ClientSocket.OnDisconnect=ClientSocketDisconnect;
ClientSocket.Open;

в процедуре ClientSocketDisconnect(Sender: TObject; Socket: TCustomWinSocket)
хочу удалить ранее созданные ClientSocket - у меня ни как это не не удается сделать Free так как возникает ошибка 10038

подскажите пожалуйста как мне это сделать?


 
Сергей М. ©   (2009-04-28 17:42) [1]

А кто такой Self ?


 
Сергей   (2009-04-28 17:52) [2]


> А кто такой Self ?


сорри - у меня это просто поверхность TComponent - для динамически созданных объектов

ClientSocket:=TClientSocket.Create(NIL); - разницы нет


 
Сергей М. ©   (2009-04-28 19:18) [3]


> у меня это просто поверхность


Ты русский понимаешь ?)

Я не спрашиваю, кто или что у тебя там есть "поверхность".

Я спрашиваю, что за объект у тебя фигурирует в кач-ве Self, коль скоро ты передаешь его фактическим параметром в конструктор класса TClientSocket..

Или тебе фиолетово кто он такой ?)


 
Сергей   (2009-04-29 00:44) [4]

Тезка я уже тебе ответил - там NIL !!!


 
Сергей М. ©   (2009-04-29 10:27) [5]

Я к тому, что если в приложении есть хотя бы одно окно - к примеру, окно формы - ему можно послать предопределенное асинхронное сообщение (PostMessage), при получении и обработке которого требуемый объект будет уничтожен.

Вот и предположил, что Self у тебя ссылается на форму


 
Сергей   (2009-04-29 12:07) [6]

у меня вообще нет ни одной формы - dll
TClientSocket - создаются динамически для разных коннектов
Но это в принципе не важно - так как в апликейшине на простейшем примере та же проблема....
задача стоит удалить нужный при получении события о разрыве связи

Вопрос остался открытым


 
Сергей М. ©   (2009-04-29 12:23) [7]


> у меня вообще нет ни одной формы - dll


> Но это в принципе не важно


Это очень важно !
Неблок.режим использует для нотификации о гнездовых событиях механизм оконных сообщений. Чтобы этот механизм работал, нужен цикл ожидания-выборки-диспетчеризации оконных сообщений в том же потоке, который выполнил метод TClientSocket.Open.
Поскольку в твоей dll этого цикла нет, то он так или иначе должен присутствовать в коде где-то за пределами твоей dll, например, в коде хост-приложения, в противном случае компонент работать не будет.


 
Сергей   (2009-04-29 21:24) [8]

Самое интересное что у меня все замечательно работает
Могу создавать и удалять динамические объекты TClientSocket в любой момент времени. Обмен пакета работает.
В апликейшене если по событию расконекта изменить тип на блокирующий - все замечательно грохается.
В dll не дает менять типа - так как типа есть связь,  закрытие соединение приводит к зацикливанию. Просто активность на false результата не даёт


 
Сергей М. ©   (2009-04-30 08:15) [9]


> Самое интересное что у меня все замечательно работает


А теперь создай простейшее консольное приложение, вызови из него свою dll и удивись - работать твой неблокирующий ClientSocket не будет.


 
Сергей   (2009-04-30 16:49) [10]

спасибо за разъяснение... dll будет использоваться из оконных положений
так что проблем не будет

как удалить объект я так и не узнал...


 
Empleado ©   (2009-04-30 16:52) [11]


> dll будет использоваться из оконных положений
.....
> как удалить объект я так и не узнал...

see Сергей М. ©   (29.04.09 10:27) [5]


 
Сергей М. ©   (2009-04-30 20:38) [12]


> dll будет использоваться из оконных положений


Даже если из оконных, не факт что твоя dll будет работоспособной.
То что ты тестируешь работоспособность своей dll в простейшем "шаблонном" дельфийском тестовом VCL-приложении, вовсе не говорит о том, что та же dll будет работоспособна при ее использовании любым другим "оконным" приложением.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2011.08.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.004 c
1-1264400079
Spot
2010-01-25 09:14
2011.08.28
Двойной клик по RXsplitter


4-1249212093
QAZ
2009-08-02 15:21
2011.08.28
Hook RawInput


2-1305542929
Соня
2011-05-16 14:48
2011.08.28
Delphi. Соединение с БД MS SQL Server


8-1215334418
leonidus
2008-07-06 12:53
2011.08.28
Добавление посторонней информации в JPEG-файл


2-1305552149
Соня
2011-05-16 17:22
2011.08.28
Запросы в ADODataSet





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский