Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как работает 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]

неее... это уже перебор. Ладно в Прочем - он для того и преднозначен, но в сетях...


Наверх

Титульная страница Поиск, карта сайта Написать письмо