저 같은 경우에는
동시 접속 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;
: : }
: : }