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
[58778] Re:Re:[긴급]TCP 에서 쓰레드 이용시 Terminate() 가 안돼요 ㅠ
정민채 [forevermc] 973 읽음    2009-10-14 17:07
쓰레드를 대기 상태로 만드는건가요?
그렇다면.. 다시 실행하게 할려면..
thread1->Terminated = false;
thread2->Terminated = false;
상태로 만들면 다시 돌아갈려나요?? ㅡ0ㅡ?


장성호 님이 쓰신 글 :
:
: 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() 가 안돼요 ㅠ 정민채 973 2009/10/14
58781             Re:Re:Re:[긴급]TCP 에서 쓰레드 이용시 Terminate() 가 안돼요 ㅠ 장성호 1429 2009/10/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.