![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как работает TServerClientThread [D7, WinXP]
malefik © (2006-11-01 08:47:00)приветствую коллеги...
вопрос такого плана....все тривиально по хелпу собсно....
//---------------------------------------------------------------------------
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 15:30:00) [1]
> я говорю о том что не небходимости держать в памяти обьекты
Тебе может быть и нет, а компонент лучше тебя знает, когда ему уничтожать этот объект.
Кэш, батенька, кэш..
Сергей М. (2006-11-01 15:29:00) [2]
> ОБЬЯВЛЕН то он сами видите как
Вижу.
Понятия не имею, правильно ли, потому как к Делфи7 сей код отношения не имеет.
> ну блин насмешил
Я тебе что, петрушка базарный, чтобы веселить тебя ?)
> KeepInCache=true
Это тынаписал.
Значит ты должен понимать смысл написанного оти до.
Если не понимаешь, то к твоим услугам - станд.справка к компоненту TServerSocket и открытые исх-тексты компонента.
malefik (2006-11-01 14:41:00) [3]ХМ......ОБЬЯВЛЕН то он сами видите как.....
> Читай так:
>
> ".. будет обязательно вызван при TServerSocket.Close"
ну блин насмешил......я говорю о том что не небходимости держать в памяти обьекты....еслисоединение по нему уже нет.....а если у меня 10000 подключений....и причем постоянно добавляются.....
КАК ИХ УДАЛЯТЬ???
Сергей М. (2006-11-01 13:35:00) [4]
> как минимум однократно
Это я ерунду сморозил.
Читай так:
".. будет обязательно вызван при TServerSocket.Close"
Сергей М. (2006-11-01 13:33:00) [5]Если твой деструктор объявлен грамотно (он должен перекрывать виртуальный деструктор предка), то он будет обязательно вызван как минимум однократно - при TServerSocket.Close;
malefik (2006-11-01 13:13:00) [6]можно узнать каких? опыты с дисконектами и работой с мотодами класса результатов не дали...
Сергей М. (2006-11-01 08:52:00) [7]
> почему собсно дело до деструктора никогда не доходит?
Почему не доходит ?
Доходит, но при соблюдении ряда условий.
Орион (2006-11-01 08:49:00) [8]неее... это уже перебор. Ладно в Прочем - он для того и преднозначен, но в сетях...