C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[52296] 클라이언트 테스트 프로그램에 문제가 있었네요..^^;;
역삼골 [saonara] 1983 읽음    2008-02-15 20:15
클라이언트 쓰래드 Terminate가 제대로 않되서
4000개에서 멈췄나봅니다.

항상 감사합니다.
즐거운 주말 되세요. ^^

역삼골 님이 쓰신 글 :
: 저 같은 경우에는
: 동시 접속 100유저로 테스트 하고 있습니다.
: 즉, 동시에 100개 이상은 쓰래드가 생성되지 않는데요.
:
: 즉, 쓰래도 생성하고 죽이고 생성하고 죽이고 ...반복합니다.
: ActiveThread를 봐도 평균 50개 정도입니다.
:
: 장성호님 팁에 있는데로라면
: 최대 2000건(팁 내용대로..) 이상은 쓰래드가 생성되지 않는건가요?
:
: 전 동시에 2000건 생성하는건 아닙니다.
:
: 항상 답변 고맙습니다. ^^
:
: 장성호 님이 쓰신 글 :
: : 아래 팁을 참조하세요
: :
: : http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=186
: :
: : 그럼..
: :
: : 역삼골 님이 쓰신 글 :
: : : 왜 4천건정도 접속 후에 접속이 않됩니다.
: : : 서버 소켓을 클로즈하고 접속하면 다시 또 접속은 되지만 또 4천 후면 접속이 않되네요.
: : : 왜 그런지 모르겠습니다.
: : :
: : : 테스트용 프로그램을 만들어서 계속 접속하고 해제하고 반복해서 돌리고 있습니다.
: : :
: : : //---------------------------------------------------------------------------
: : : //Socket Thread Create Event
: : : //---------------------------------------------------------------------------
: : : void __fastcall Tfkmsmain::AuthServerSocketGetThread(TObject *Sender,
: : :       TServerClientWinSocket *ClientSocket,
: : :       TServerClientThread *&SocketThread)
: : : {
: : :     try
: : :     {
: : :     //TServerClientThread 를 생성
: : :     SocketThread = new TServerSocketThread(false, ClientSocket);
: : :     }
: : :     //Excetion process
: : :     __except(EXCEPTION_EXECUTE_HANDLER)
: : :     {
: : :     }
: : : }
: : :
: : : //---------------------------------------------------------------------------
: : : //Thread Start Event
: : : //---------------------------------------------------------------------------
: : : void __fastcall Tfkmsmain::AuthServerSocketThreadStart(TObject *Sender,
: : :       TServerClientThread *Thread)
: : : {
: : :     //Thread Object, Socket handle Insert
: : :     ThreadObjectCombo->Items->AddObject(IntToStr(Thread->ThreadID), Thread);
: : :     Label1->Caption = IntToStr(StrToInt(Label1->Caption) + 1);
: : : }
: : :
: : : //---------------------------------------------------------------------------
: : : //Socket Thread End Event
: : : //---------------------------------------------------------------------------
: : : void __fastcall Tfkmsmain::AuthServerSocketThreadEnd(TObject *Sender,
: : :       TServerClientThread *Thread)
: : : {
: : :     Thread->Terminate();
: : :    
: : :     //Close Socket Handle Search
: : :     int nObjectIndex = ThreadObjectCombo->Items->IndexOf(IntToStr(Thread->ThreadID));
: : :     if (nObjectIndex >= 0) ThreadObjectCombo->Items->Delete(nObjectIndex);
: : :     Label2->Caption = IntToStr(StrToInt(Label2->Caption) + 2);
: : : }
: : :
: : : void __fastcall TServerSocketThread::ClientExecute(void)
: : : {
: : :     TWinSocketStream *pStream = 0;
: : :     BYTE bReceiveBuffer[65536] = {0x00,},
: : :         bSendBuffer[65536] = {0x00,};
: : :     long nReceiveBufferLen = 0,
: : :         nSendBufferLen = 0;
: : :     long nWaitingTime = 0;
: : :     SYSTEM_WORK_INFO tSystemWorkInfo;
: : :     int nWaitTimeOut = 60000;   //ms
: : :     bool bFirstMsgRcv = true;
: : :
: : :     //Socket Handle save
: : :     nSocketHandle = ClientSocket->SocketHandle;
: : :
: : :      //System Work Information Structure Reset
: : :     memset((char*)&tSystemWorkInfo, 0x00, sizeof(SYSTEM_WORK_INFO));
: : :
: : : try
: : : {
: : :     //TWinSocketStream is a stream that provides services which allow
: : :     //applications to read from or write to socket connections.
: : :     pStream = new TWinSocketStream(ClientSocket, 60000);
: : :
: : :     //Waiting condition : not Time Out, not Terminate, not Socket Disconnect
: : :     while(!Terminated && ClientSocket->Connected)                     //nWaitingTime < nSocketTimeOut &&
: : :     {
: : :         //Waits up to TimeOut milliseconds for the socket connection to be ready to transfer data.
: : :         //Application->ProcessMessages();
: : :         if(pStream->WaitForData(nWaitTimeOut))
: : :         {
: : :             //
: : :             //Thread Blocking mode then read(void*,int) function use
: : :             //
: : :             //Reads up to Count bytes from the socket connection into Buffer.
: : :             if (Terminated || !ClientSocket->Connected) break;
: : :
: : :             try
: : :             {
: : :             //Read Buffer
: : :             memset(bReceiveBuffer, 0, sizeof(bReceiveBuffer));
: : :             nReceiveBufferLen = pStream->Read(bReceiveBuffer, sizeof(bReceiveBuffer));
: : :             }//try
: : :             catch (Exception &E)
: : :             {
: : :             HandleException();
: : :             }
: : :             if (nReceiveBufferLen == 0) break;
: : :             else
: : :             {                               
: : :                 //CHIP Process Request
: : :                 nWaitingTime = 0;
: : :                 memset(bSendBuffer, 0x00, sizeof(bSendBuffer));
: : :                 memset(tSystemWorkInfo.cWorkResult, 0x00, sizeof(tSystemWorkInfo.cWorkResult));
: : :                 epassclass->InferfaceMain(&tSystemWorkInfo, bReceiveBuffer, nReceiveBufferLen, bSendBuffer, &nSendBufferLen);
: : :
: : :                 //Client Socket Send Buffer
: : :                 pStream->Write(bSendBuffer, nSendBufferLen);
: : :             }
: : :         }
: : :        
: : :         //Delay time
: : :         Sleep(10);
: : :     }
: : :   
: : :     //Client Socket Close
: : :     ClientSocket->Close();
: : :
: : :     //Stream free
: : :     delete pStream;
: : : }
: : : //Excetion process
: : : __except(EXCEPTION_EXECUTE_HANDLER)
: : : {
: : :     //Client Socket Disconnect
: : :     ClientSocket->Close();
: : :
: : :     //Stream free
: : :      delete pStream;
: : : }
: : : }

+ -

관련 글 리스트
52293 TServerClientThread에서 4천건정도 접속하면 다음부터 접속이 안되네요...소스 좀 봐주세요...ㅠㅠ 역삼골 2388 2008/02/15
52298     Re:TServerClientThread에서 4천건정도 접속하면 다음부터 접속이 안되네요...소스 좀 봐주세요...ㅠㅠ 김호광 2251 2008/02/15
52294     Re:TServerClientThread에서 4천건정도 접속하면 다음부터 접속이 안되네요...소스 좀 봐주세요...ㅠㅠ 장성호 2823 2008/02/15
52295         장성호님 죄송한데 한가지만 더 여쭤보겠습니다. ^^ 역삼골 1938 2008/02/15
52296             클라이언트 테스트 프로그램에 문제가 있었네요..^^;; 역삼골 1983 2008/02/15
52299                 Re:클라이언트 테스트 프로그램에 문제가 있었네요..^^;; 김태선 2734 2008/02/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.