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

Вниз

Как удалить динамически созданные 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.011 c
15-1305100097
Scott Storch
2011-05-11 11:48
2011.08.28
оптимизация


15-1304595679
И. Павел
2011-05-05 15:41
2011.08.28
чтение системных журналов сообщений


6-1240275063
mm0
2009-04-21 04:51
2011.08.28
Проблема WebBrowser1.Navigate()


2-1305286843
Gu
2011-05-13 15:40
2011.08.28
Вопрос по классам


2-1305453738
обморок
2011-05-15 14:02
2011.08.28
самое длинное слово