Форум: "Сети";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
Внизкак работает TServerClientThread Найти похожие ветки
← →
malefik (2006-11-01 08:47) [0]приветствую коллеги...
вопрос такого плана....все тривиально по хелпу собсно....
//---------------------------------------------------------------------------
void __fastcall TMyServerThread::ClientExecute(void)
{
while (!Terminated && ClientSocket->Connected)
{
try
{
TWinSocketStream* pStream = new TWinSocketStream(ClientSocket, CLIENTWAITTIME);
try
{
char buffer[BUFFERSIZE];
memset(buffer, 0, sizeof(buffer));
if (pStream->WaitForData(CLIENTWAITTIME))
{
if (pStream->Read(buffer, sizeof(buffer)) == 0)
ClientSocket->Close();
else
{
if (!(_gps_data->_send_data_to_base(buffer)))
{
ClientSocket->Close();
}
}
}
else
ClientSocket->Close();
}
__finally
{
delete pStream;
}
}
catch (...)
{
HandleException();
}
}
}
void __fastcall TmainForm::ServerSocketGetThread(TObject* Sender, TServerClientWinSocket* ClientSocket, TServerClientThread*& SocketThread)
{
SocketThread = new TMyServerThread(false, ClientSocket);
}
собсно вот дочерний класс от TServerClientThread
class PACKAGE TMyServerThread : public Scktcomp::TServerClientThread
{
public:
__fastcall TMyServerThread(bool CreateSuspended, TServerClientWinSocket* ASocket)
: Scktcomp::TServerClientThread(CreateSuspended, ASocket)
{ CreateSuspended = false;
KeepInCache=true;
FreeOnTerminate=false;
_gps_data = new TGPSData();
};
__fastcall ~TMyServerThread(void)
{
delete(_gps_data);
}
void __fastcall ClientExecute(void);
TGPSData * _gps_data;
};
тут мы видим конструктор и деструктор.....
вопрос.. почему собсно дело до деструктора никогда не доходит????
ставил там брек поинт ......
Как ServerSocket удаляет за собой эти обьекты?
← →
Орион © (2006-11-01 08:49) [1]неее... это уже перебор. Ладно в Прочем - он для того и преднозначен, но в сетях...
← →
Сергей М. © (2006-11-01 08:52) [2]
> почему собсно дело до деструктора никогда не доходит?
Почему не доходит ?
Доходит, но при соблюдении ряда условий.
← →
malefik (2006-11-01 13:13) [3]можно узнать каких? опыты с дисконектами и работой с мотодами класса результатов не дали...
← →
Сергей М. © (2006-11-01 13:33) [4]Если твой деструктор объявлен грамотно (он должен перекрывать виртуальный деструктор предка), то он будет обязательно вызван как минимум однократно - при TServerSocket.Close;
← →
Сергей М. © (2006-11-01 13:35) [5]
> как минимум однократно
Это я ерунду сморозил.
Читай так:
".. будет обязательно вызван при TServerSocket.Close"
← →
malefik (2006-11-01 14:41) [6]ХМ......ОБЬЯВЛЕН то он сами видите как.....
> Читай так:
>
> ".. будет обязательно вызван при TServerSocket.Close"
ну блин насмешил......я говорю о том что не небходимости держать в памяти обьекты....еслисоединение по нему уже нет.....а если у меня 10000 подключений....и причем постоянно добавляются.....
КАК ИХ УДАЛЯТЬ???
← →
Сергей М. © (2006-11-01 15:29) [7]
> ОБЬЯВЛЕН то он сами видите как
Вижу.
Понятия не имею, правильно ли, потому как к Делфи7 сей код отношения не имеет.
> ну блин насмешил
Я тебе что, петрушка базарный, чтобы веселить тебя ?)
> KeepInCache=true
Это ты написал.
Значит ты должен понимать смысл написанного от и до.
Если не понимаешь, то к твоим услугам - станд.справка к компоненту TServerSocket и открытые исх-тексты компонента.
← →
Сергей М. © (2006-11-01 15:30) [8]
> я говорю о том что не небходимости держать в памяти обьекты
Тебе может быть и нет, а компонент лучше тебя знает, когда ему уничтожать этот объект.
Кэш, батенька, кэш..
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c