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
[58777] Re:[긴급]TCP 에서 쓰레드 이용시 Terminate() 가 안돼요 ㅠ
장성호 [nasilso] 985 읽음    2009-10-14 16:41
thread1.execute() 
{ 
      while(1) 
      { 
         회선 점검용 데이터 전송... 
          if(서버가 응답이 없을때) 
          { 
              closesocket(소켓); 
              thread2->Terminate(); 
              return;        
          } 
      } 
} 

thread2.execute() 
{ 
     while(1) 
      { 
         데이터 처리.. 
      } 
} 


위와같이 하면 안됩니다.

TThread의 Terminate함수는 단지 TThread의  bool형 멤버필드인  FTerminated 를 true로 바꿔줄뿐입니다.

thread1.execute() 
{ 
      while(! this->Terminated) //이렇게 해야..
      { 
         회선 점검용 데이터 전송... 
          if(서버가 응답이 없을때) 
          { 
              closesocket(소켓); 
              thread2->Terminate(); 
              return;        
          } 
      } 
} 

thread2.execute() 
{ 
     while(! this->Terminated) //이렇게 해야..
      { 
         데이터 처리.. 
      } 
} 


위와같이 Terminated 필드가 true가 아닐때만 while문을 돌려야 합니다.
그것이 아니라면 win32 api를 써서 강제로 Thread를 terminated할수는 있지만...
문제가 발생할 가능성이 여러가지가 있으니..

위와같이 해서 쓰레스 스스로 알아서 terminated되도록하는것이 정석입니다.

그럼..


정민채 님이 쓰신 글 :
: 아.. 무쟈게 고생하고 있습니다 ㅠㅠ;
: 이렇게 하면 될듯도 하지만 도무지 되지가 않는군요
:
: TCP client 를 만들고 있습니다.
: thread1 : 회선 점검용 쓰레드
: thread2 : 회선 점검 이외의 데이터 처리 쓰레드
:
: main()
: {
:     if(TCPopen())
:     {
:        thread1 생성;
:        thread2 생성;
:
:        while(flag){}
:     }
: }
:
: thread1.execute()
: {
:       while(1)
:       {
:          회선 점검용 데이터 전송...
:           if(서버가 응답이 없을때)
:           {
:               closesocket(소켓);
:               thread2->Terminate();
:               return;       
:           }
:       }
: }
:
: thread2.execute()
: {
:      while(1)
:       {
:          데이터 처리..
:       }
: }
:
: 위와 같이 구성했는데요.. 문제는 서버를 죽였다가 살리면...
: thread1, thread2에 ID값이 NULL 이여야 다시 생성하고 동작할텐데.
: 쓰레드에 ID값이 들어있군요 ㅠㅠ;
: 아!!! 이론상 완벽할듯 한데 ㅠㅠ;; 역시 내공이 부족하여 ㅠㅠ;
: 답변 꼭좀 부탁드려요 ㅠㅠ;;; 추천하시는 방법이라던지 ㅠㅠ;
: 지푸라기라도 잡고 싶은 심정입니다 ㅠㅠ;;

+ -

관련 글 리스트
58775 [긴급]TCP 에서 쓰레드 이용시 Terminate() 가 안돼요 ㅠ 정민채 1029 2009/10/14
58777     Re:[긴급]TCP 에서 쓰레드 이용시 Terminate() 가 안돼요 ㅠ 장성호 985 2009/10/14
58778         Re:Re:[긴급]TCP 에서 쓰레드 이용시 Terminate() 가 안돼요 ㅠ 정민채 974 2009/10/14
58781             Re:Re:Re:[긴급]TCP 에서 쓰레드 이용시 Terminate() 가 안돼요 ㅠ 장성호 1430 2009/10/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.