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
[49190] 빈번하게 생성되고 파괴되는 Thread 안에서 TClientSocket 을 Create 시키면....
권상득 [] 1394 읽음    2007-05-08 09:41
빈번하게 생성되고 파괴되는 Thread 안에서 TClientSocket 을 Create 시키면.
처음에는 별무리 없이 소켓을 잘 만들고 사용후 정상적으로 파괴됩니다.
일정 시간이 경과되고 나면 소켓 Create 시 오류가 나기 시작하고.
그 발생 간격이 점차 좁아지면서 너무 자주 오류가 납니다. 다행이 Create 시 Try 문을 사용하여
오류를 검출하고 Free 시겨주는 것으로 데드락까지 가는것을 막기는 하였으나
근본적인 해결방법은 없는가요?

사용환경 :
       C++Builder 5.0 , FastMM , IsMultiThread = True  ,   SetThreadAffinityMask(GetCurrentThread(), 1)
       IBM XSeris 365 , Intel(R) Xeon(TM) MP CPU 2.0GHz 듀얼, 3.50GB RAM, 하이퍼쓰레딩 사용

소스구현부분...
main.cpp-------------------------------------
void __fastcall TMain::FormCreate(TObject *Sender)
{
  SetThreadAffinityMask(GetCurrentThread(), 1);
  IsMultiThread = True;
}

void __fastcall TMain::MakeThread(TObject *Sender)
{
  ThreadMy *JobMy; //TThread 를 상속받아 만들었음...
   try {
       JobMy = new ThreadMy();
       if (JobMy == NULL) {
           ShowMessage(FormatDateTime("hh:mm:ss",Now()) + " -> " + Data + ", Thread Create Error!!!");
       } else {
           JobMy->OnTerminate = ThreadDone;
       }
   } catch(...) {
       ShowMessage(FormatDateTime("hh:mm:ss",Now()) + " -> " + Data + ", Thread Create Error!!!"); 
   }
}

ThreadMy.cpp-------------------------------------
__fastcall ThreadMy::ThreadMy() : TThread(False)
{
  FreeOnTerminate = True;
  FTerminate = false; //전역변수

  try {
      FSocket = new TClientSocket(Application);
      FSocket->OnError = FSocketError;
      FSocket->OnDisconnect = FSocketDisconnect;
      FSocket->Address = "127.0.0.1";
      FSocket->Port = 3000;
      FSocket->ClientType = ctBlocking;
  } catch(...) { FTerminate = true; }
}

void __fastcall ThreadMy::Execute()
{
  if (!FTerminate) {
      쓰레드안에서 할일들을 합니다..
  }

  try {
      if (FSocket != NULL) FSocket->Free();
  } catch(...) { }
}

+ -

관련 글 리스트
49190 빈번하게 생성되고 파괴되는 Thread 안에서 TClientSocket 을 Create 시키면.... 권상득 1394 2007/05/08
49205     Re:빈번하게 생성되고 파괴되는 Thread 안에서 TClientSocket 을 Create 시키면.... 권상득 1966 2007/05/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.